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