Функция MapWindowPoints (winuser.h)

Функция MapWindowPoints преобразует (сопоставляет) набор точек из координатного пространства относительно одного окна в координатное пространство относительно другого окна.

Синтаксис

int MapWindowPoints(
  [in]      HWND    hWndFrom,
  [in]      HWND    hWndTo,
  [in, out] LPPOINT lpPoints,
  [in]      UINT    cPoints
);

Параметры

[in] hWndFrom

Дескриптор окна, из которого преобразуются точки. Если этот параметр имеет значение NULL или HWND_DESKTOP, то предполагается, что точки находятся в экранных координатах.

[in] hWndTo

Дескриптор окна, в которое преобразуются точки. Если этот параметр имеет значение NULL или HWND_DESKTOP, точки преобразуются в экранные координаты.

[in, out] lpPoints

Указатель на массив структур POINT , содержащих набор точек для преобразования. Баллы находятся в единицах устройств. Этот параметр также может указывать на структуру RECT , в этом случае параметру cPoints следует задать значение 2.

[in] cPoints

Количество структур POINT в массиве, на который указывает параметр lpPoints .

Возвращаемое значение

Если функция выполняется успешно, слово низкого порядка возвращаемого значения — это количество пикселей, добавляемых к горизонтальной координате каждой исходной точки, чтобы вычислить горизонтальную координату каждой конечной точки. (Кроме того, если зеркально отражается точно один из hWndFrom и hWndTo , то каждая результирующая горизонтальная координата умножается на -1.) Слово высокого порядка — это количество пикселей, добавляемых к вертикальной координате каждой исходной точки, чтобы вычислить вертикальную координату каждой конечной точки.

Если функция выполняется неудачно, возвращается нулевое значение. Вызовите Метод SetLastError перед вызовом этого метода, чтобы отличить возвращаемое значение ошибки от допустимого возвращаемого значения "0".

Комментарии

Если hWndFrom или hWndTo (или оба) являются зеркальными окнами (т. е. имеют WS_EX_LAYOUTRTL расширенный стиль) и точно две точки передаются в lpPoints, MapWindowPoints интерпретирует эти две точки как RECT и, возможно, автоматически переключит левое и правое поля этого прямоугольника, чтобы убедиться, что левый не больше правого. Если в lpPoints передается любое количество точек, отличное от 2, то MapWindowPoints правильно сопоставляет координаты каждой из этих точек по отдельности, поэтому если передать указатель на массив из нескольких прямоугольников в lpPoints, новые прямоугольники могут получить левое поле больше правого. Таким образом, чтобы гарантировать правильное преобразование координат прямоугольника, необходимо вызывать MapWindowPoints с одним указателем RECT за раз, как показано в следующем примере:


   RECT        rc[10];

   for(int i = 0; i < (sizeof(rc)/sizeof(rc[0])); i++)
   {
       MapWindowPoints(hWnd1, hWnd2, (LPPOINT)(&rc[i]), (sizeof(RECT)/sizeof(POINT)) );
   }

Кроме того, если необходимо точно сопоставить две независимые точки и вы не хотите, чтобы логика RECT применяла к ним MapWindowPoints, чтобы гарантировать правильный результат, необходимо вызывать MapWindowPoints с одним указателем POINT за раз, как показано в следующем примере:


   POINT pt[2];

   MapWindowPoints(hWnd1, hWnd2, &pt[0], 1);
   MapWindowPoints(hWnd1, hWnd2, &pt[1], 1);

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll
Набор API ext-ms-win-ntuser-window-l1-1-2 (появилось в Windows 10 версии 10.0.10240)

См. также раздел

ClientToScreen

Функции координатного пространства и преобразования

Общие сведения о координатных пространствах и преобразованиях

ТОЧКИ

RECT

ScreenToClient