FAQ:WinAPI VCPP:преобразование абсолютных координат экрана в относительные координаты окна
Материал из Весельчак У
Версия от 22:04, 6 августа 2008; Mczim (обсуждение | вклад) (/* Если известны абсолютные координаты точки на экране, как перевести эти координаты в относительные координаты некоторого известного о)
Если известны абсолютные координаты точки на экране, как перевести эти координаты в относительные координаты некоторого известного окна?
Используя функцию 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 - относительные координаты