FAQ:WinAPI VCPP:преобразование абсолютных координат экрана в относительные координаты окна — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
(Новая: ===Если известны абсолютные координаты точки на экране, как перевести эти координаты в относительные ...)
 
м (/* Если известны абсолютные координаты точки на экране, как перевести эти координаты в относительные координаты некоторого известного о)
Строка 2: Строка 2:
  
 
Используя функцию API, проецирующую точки одного окна на другое:
 
Используя функцию API, проецирующую точки одного окна на другое:
<pre>
+
<syntaxhighlight lang="cpp">
 
WINUSERAPI int WINAPI MapWindowPoints(
 
WINUSERAPI int WINAPI MapWindowPoints(
 
HWND hWndFrom, //хендл окна "откуда"
 
HWND hWndFrom, //хендл окна "откуда"
Строка 10: Строка 10:
  
 
//для абсолютных координат задать хендл==0 или HWND_DESKTOP
 
//для абсолютных координат задать хендл==0 или HWND_DESKTOP
</pre>
+
</syntaxhighlight>
  
 
Или аналогичные функции MFC класса CWnd:
 
Или аналогичные функции MFC класса CWnd:
<pre>
+
<syntaxhighlight lang="cpp">
 
HWND_DESKTOP
 
HWND_DESKTOP
 
void MapWindowPoints(
 
void MapWindowPoints(
Строка 23: Строка 23:
 
LPRECT lpRect) const;
 
LPRECT lpRect) const;
 
//для абсолютных координат задать pwndTo==0
 
//для абсолютных координат задать pwndTo==0
</pre>
+
</syntaxhighlight>
  
 
Пример: определяем, какие относительные координаты имеет текущее положение курсора в окне, адрес которого содержится в указателе CWnd* pWnd:
 
Пример: определяем, какие относительные координаты имеет текущее положение курсора в окне, адрес которого содержится в указателе CWnd* pWnd:
<pre>
+
<syntaxhighlight lang="cpp">
 
//определяем абсолютные координаты, текущего
 
//определяем абсолютные координаты, текущего
 
//положения курсора
 
//положения курсора
Строка 36: Строка 36:
 
 
 
//pnt - относительные координаты
 
//pnt - относительные координаты
</pre>
+
</syntaxhighlight>
  
 
[[Category:FAQ:WinAPI VCPP]]
 
[[Category:FAQ:WinAPI VCPP]]

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

Если известны абсолютные координаты точки на экране, как перевести эти координаты в относительные координаты некоторого известного окна?

Используя функцию API, проецирующую точки одного окна на другое:

WINUSERAPI int WINAPI MapWindowPoints(
	HWND hWndFrom,		//хендл окна "откуда"
	HWND hWndTo,		//хендл окна "куда"
	LPPOINT lpPoints,	//указатель на массив POINT[]
	UINT cPoints);		//размер массива
 
	//для абсолютных координат задать хендл==0 или HWND_DESKTOP

Или аналогичные функции MFC класса CWnd:

HWND_DESKTOP
	void MapWindowPoints(
		CWnd* pwndTo,
		LPPOINT lpPoint,
		UINT nCount) const;
	void MapWindowPoints(
		CWnd* pwndTo,
		LPRECT lpRect) const;
	//для абсолютных координат задать pwndTo==0

Пример: определяем, какие относительные координаты имеет текущее положение курсора в окне, адрес которого содержится в указателе CWnd* pWnd:

	//определяем абсолютные координаты, текущего
	//положения курсора
	POINT pnt;
	::GetCursorPos(&pnt);
 
	//проецируем на окно *pWnd (через API функцию)
	::MapWindowPoints(HWND_DESKTOP, pWnd->m_hWnd, &pnt, 1);
 
	//pnt - относительные координаты