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