FAQ:WinAPI VCPP:CScrollView и определение координат курсора мыши
Материал из Весельчак У
Версия от 10:11, 29 июля 2008; RXL (обсуждение | вклад) (Новая: ===Если окно объекта, производного от CScrollView, имеет полосы прокрутки, то как определить координаты курс...)
Если окно объекта, производного от CScrollView, имеет полосы прокрутки, то как определить координаты курсора мыши?
От координат на экране нужно отнять величины сдвига, заданные в данный момент полосами прокруток. При нулевых положениях полос прокруток левый верхний угол окна имеет логические координаты (0,0). При щелчке по окну в обработчик OnLButtonDown пришли координаты (X,Y). Для определения действительных значений координат берём текущие значения сдвига окна, заданные полосами прокруток (dX,dY), и отнимаем от координат (X,Y):
void CMyScrollView::OnLButtonDown(UINT nFlags, CPoint point) { POINT pnt = GetScrollPosition(); //или //CPoint pnt = GetScrollPosition(); long Xw=point.x-pnt.x; long Yw=point.y-pnt.y; //Если теперь нарисовать на окне точку Xw,Yw, то на //экране точка будет выведена в точности под курсором CDC* pdc=GetDC(); pdc->SetPixel(Xw,Yw,RGB(0,0,0)); ReleaseDC(pdc); CScrollView::OnLButtonDown(nFlags, point); }