Función MapWindowPoints (winuser.h)

La función MapWindowPoints convierte (asigna) un conjunto de puntos de un espacio de coordenadas relativo a una ventana a un espacio de coordenadas en relación con otra ventana.

Sintaxis

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

Parámetros

[in] hWndFrom

Identificador de la ventana desde la que se convierten los puntos. Si este parámetro es NULL o HWND_DESKTOP, se supone que los puntos están en coordenadas de pantalla.

[in] hWndTo

Identificador de la ventana a la que se convierten los puntos. Si este parámetro es NULL o HWND_DESKTOP, los puntos se convierten en coordenadas de pantalla.

[in, out] lpPoints

Puntero a una matriz de estructuras POINT que contienen el conjunto de puntos que se van a convertir. Los puntos están en unidades de dispositivo. Este parámetro también puede apuntar a una estructura RECT , en cuyo caso el parámetro cPoints debe establecerse en 2.

[in] cPoints

Número de estructuras POINT de la matriz a las que apunta el parámetro lpPoints .

Valor devuelto

Si la función se realiza correctamente, la palabra de orden inferior del valor devuelto es el número de píxeles agregados a la coordenada horizontal de cada punto de origen para calcular la coordenada horizontal de cada punto de destino. (Además de eso, si precisamente se refleja uno de hWndFrom y hWndTo , cada coordenada horizontal resultante se multiplica por -1). La palabra de orden superior es el número de píxeles agregados a la coordenada vertical de cada punto de origen para calcular la coordenada vertical de cada punto de destino.

Si la función no se realiza correctamente, el valor devuelto es cero. Llame a SetLastError antes de llamar a este método para diferenciar un valor devuelto de error de un valor devuelto "0" legítimo.

Comentarios

Si hWndFrom o hWndTo (o ambos) son ventanas reflejadas (es decir, tienen WS_EX_LAYOUTRTL estilo extendido) y precisamente dos puntos se pasan en lpPoints, MapWindowPoints interpretará esos dos puntos como RECT y posiblemente intercambiará automáticamente los campos izquierdo y derecho de ese rectángulo para asegurarse de que la izquierda no es mayor que la derecha. Si se pasa cualquier número de puntos distintos de 2 en lpPoints, MapWindowPoints asignará correctamente las coordenadas de cada uno de esos puntos por separado, por lo que si pasa un puntero a una matriz de más de un rectángulo en lpPoints, los nuevos rectángulos pueden obtener su campo izquierdo mayor que derecho. Por lo tanto, para garantizar la transformación correcta de las coordenadas del rectángulo, debe llamar a MapWindowPoints con un puntero RECT cada vez, como se muestra en el ejemplo siguiente:


   RECT        rc[10];

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

Además, si necesita asignar exactamente dos puntos independientes y no desea que mapWindowPoints aplique la lógica RECT a ellos, para garantizar el resultado correcto, debe llamar a MapWindowPoints con un puntero POINT a la vez, como se muestra en el ejemplo siguiente:


   POINT pt[2];

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

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winuser.h (incluir Windows.h)
Library User32.lib
Archivo DLL User32.dll
Conjunto de API ext-ms-win-ntuser-window-l1-1-2 (introducido en Windows 10, versión 10.0.10240)

Consulte también

ClientToScreen

Funciones de espacio y transformación de coordenadas

Información general sobre espacios y transformaciones de coordenadas

PUNTO

RECT

ScreenToClient