Condividi tramite


Funzione MapWindowPoints (winuser.h)

La funzione MapWindowPoints converte (mappe) un set di punti da uno spazio di coordinate rispetto a una finestra a uno spazio di coordinate rispetto a uno spazio di coordinate rispetto a un'altra finestra.

Sintassi

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

Parametri

[in] hWndFrom

Handle nella finestra da cui vengono convertiti i punti. Se questo parametro è NULL o HWND_DESKTOP, si presuppone che i punti siano nelle coordinate dello schermo.

[in] hWndTo

Handle nella finestra in cui vengono convertiti i punti. Se questo parametro è NULL o HWND_DESKTOP, i punti vengono convertiti in coordinate dello schermo.

[in, out] lpPoints

Puntatore a una matrice di strutture POINT che contengono il set di punti da convertire. I punti sono in unità di dispositivo. Questo parametro può anche puntare a una struttura RECT , nel qual caso il parametro cPoints deve essere impostato su 2.

[in] cPoints

Numero di strutture POINT nella matrice a cui punta il parametro lpPoints .

Valore restituito

Se la funzione ha esito positivo, la parola in ordine basso del valore restituito è il numero di pixel aggiunti alla coordinata orizzontale di ogni punto di origine per calcolare la coordinata orizzontale di ogni punto di destinazione. Inoltre, se si esegue il mirroring di uno di hWndFrom e hWndTo , ogni coordinata orizzontale risultante viene moltiplicata per -1. La parola di ordine elevato è il numero di pixel aggiunti alla coordinata verticale di ogni punto di origine per calcolare la coordinata verticale di ogni punto di destinazione.

Se la funzione ha esito negativo, il valore restituito è zero. Chiamare SetLastError prima di chiamare questo metodo per distinguere un valore restituito di errore da un valore restituito legittimo "0".

Commenti

Se hWndFrom o hWndTo (o entrambi) sono finestre con mirroring (ovvero, hanno WS_EX_LAYOUTRTL stile esteso) e precisamente due punti vengono passati in lpPoint, MapWindowPoints interpreterà questi due punti come RECT e possibilmente scambiano automaticamente i campi sinistro e destro di tale rettangolo per garantire che sinistra non sia maggiore di destra. Se viene passato un numero qualsiasi di punti diversi da 2 in lpPoint, MapWindowPoints eseguirà correttamente il mapping delle coordinate di ognuno di questi punti separatamente, quindi se si passa un puntatore a una matrice di più rettangoli in lpPoint, i nuovi rettangoli potrebbero ottenere il campo sinistro maggiore di destra. Pertanto, per garantire la corretta trasformazione delle coordinate rettangolo, è necessario chiamare MapWindowPoints con un puntatore RECT alla volta, come illustrato nell'esempio seguente:


   RECT        rc[10];

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

Inoltre, se è necessario eseguire il mapping esattamente di due punti indipendenti e non si vuole applicare la logica RECT da MapWindowPoints, per garantire il risultato corretto è necessario chiamare MapWindowPoints con un puntatore POINT alla volta, come illustrato nell'esempio seguente:


   POINT pt[2];

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

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winuser.h (include Windows.h)
Libreria User32.lib
DLL User32.dll
Set di API ext-ms-win-ntuser-window-l1-1-2 (introdotto in Windows 10 versione 10.0.10240)

Vedi anche

ClientToScreen

Funzioni di coordinate e di trasformazione

Panoramica di spazi e trasformazioni delle coordinate

PUNTO

RECT

ScreenToClient