FAQ:WinAPI VCPP:CScrollView и определение координат курсора мыши — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
(Новая: ===Если окно объекта, производного от CScrollView, имеет полосы прокрутки, то как определить координаты курс...)
 
м (Если окно объекта, производного от CScrollView, имеет полосы прокрутки, то как определить координаты курсора мыши?)
Строка 5: Строка 5:
 
полосами прокруток (dX,dY), и отнимаем от координат (X,Y):
 
полосами прокруток (dX,dY), и отнимаем от координат (X,Y):
  
<pre>
+
<syntaxhighlight lang="cpp">
 
void CMyScrollView::OnLButtonDown(UINT nFlags, CPoint point)  
 
void CMyScrollView::OnLButtonDown(UINT nFlags, CPoint point)  
 
{
 
{
Строка 22: Строка 22:
 
CScrollView::OnLButtonDown(nFlags, point);
 
CScrollView::OnLButtonDown(nFlags, point);
 
}
 
}
</pre>
+
</syntaxhighlight>
  
 
[[Category:FAQ:WinAPI VCPP]]
 
[[Category:FAQ:WinAPI VCPP]]

Версия 01:05, 30 июля 2008

Если окно объекта, производного от 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);
}