WinApi: функция MapWindowPoints принцип работы?
Подскажите пожалуйста принцип работы функции MapWindowPoints. Конечно же я прочитал на MSDN`е описание и попробывал, но что то не понимаю, как она работает в итоге:
HWND Parent_HWND = FindWindowA(NULL, "Калькулятор");
POINT my_point;
my_point.x = 10;
my_point.y = 0;
int my_int = MapWindowPoints(Parent_HWND, HWND_DESKTOP, &my_point, 0);
cout << endl;
cout << LOWORD(my_int) << endl;
cout << HIWORD(my_int) << endl;
В описании функции сказано, что она возвращает int:
Если функция завершается успешно, младшее слово возвращаемого значения представляет собой количество пикселей, добавленных к горизонтальной координате каждой исходной точки для вычисления горизонтальной координаты каждой целевой точки.
Мне всегда возвращается координата X и Y - точно соотвесвующии левому верхнему углу окна калькулятора, вне зависимости от того, какие значения я указываю в my_point.x и my_point.y.
Я не понимаю, что в итоге делает или должна делать эта функция ? :(
Ответы (1 шт):
MapWindowPoints преобразует клиентские координаты окна hWndFrom в клиентские координаты hWndTo, т.е. для заданной координаты передвигает начало координат в другую точку.
На картинке 3 координаты:
- зеленая и синяя - начала координат окон (клиентской области)
- красная - исходная координата, которую нам нужно преобразовать
Пара (x1, y1) определяет координату относительно синего начала координат
Пара (x2, y2) определяет координату относительно зеленого начала координат
Допустим, hWndFrom - дескриптор окна с синим началом координат клиентской области, а hWndTo - дескриптор окна с зеленым началом координат клиентской области, тогда если в MapWindowPoints передать пару (x1, y1), то на выходе получим (x2, y2)
p.s.: x2, конечно, в данном случае отрицательная
