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
Funciones de espacio y transformación de coordenadas
Información general sobre espacios y transformaciones de coordenadas