FAQ:WinAPI VCPP:преобразование абсолютных координат экрана в относительные координаты окна — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Новая: ===Если известны абсолютные координаты точки на экране, как перевести эти координаты в относительные ...) |
Mczim (обсуждение | вклад) (/* Если известны абсолютные координаты точки на экране, как перевести эти координаты в относительные координаты некоторого известного о) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 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: |
− | < | + | <syntaxhighlight lang="cpp"> |
//определяем абсолютные координаты, текущего | //определяем абсолютные координаты, текущего | ||
//положения курсора | //положения курсора | ||
Строка 36: | Строка 36: | ||
//pnt - относительные координаты | //pnt - относительные координаты | ||
− | </ | + | </syntaxhighlight> |
[[Category:FAQ:WinAPI VCPP]] | [[Category:FAQ:WinAPI VCPP]] |
Текущая версия на 22:04, 6 августа 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 - относительные координаты