Freigeben über


MapWindowPoints-Funktion (winuser.h)

Die MapWindowPoints-Funktion konvertiert (zugeordnet) einen Satz von Punkten aus einem Koordinatenraum relativ zu einem Fenster in einen Koordinatenraum relativ zu einem anderen Fenster.

Syntax

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

Parameter

[in] hWndFrom

Ein Handle für das Fenster, aus dem Punkte konvertiert werden. Wenn dieser Parameter NULL oder HWND_DESKTOP ist, wird davon ausgegangen, dass sich die Punkte in Bildschirmkoordinaten befinden.

[in] hWndTo

Ein Handle für das Fenster, in das Punkte konvertiert werden. Wenn dieser Parameter NULL oder HWND_DESKTOP ist, werden die Punkte in Bildschirmkoordinaten konvertiert.

[in, out] lpPoints

Ein Zeiger auf ein Array von POINT-Strukturen , die den Satz der zu konvertierenden Punkte enthalten. Die Punkte befinden sich in Geräteeinheiten. Dieser Parameter kann auch auf eine RECT-Struktur verweisen. In diesem Fall sollte der cPoints-Parameter auf 2 festgelegt werden.

[in] cPoints

Die Anzahl der POINT-Strukturen im Array, auf die der lpPoints-Parameter verweist.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist das Wort in niedriger Reihenfolge des Rückgabewerts die Anzahl der Pixel, die der horizontalen Koordinate jedes Quellpunkts hinzugefügt werden, um die horizontale Koordinate jedes Zielpunkts zu berechnen. (Außerdem wird jede resultierende horizontale Koordinate mit -1 multipliziert, wenn genau eine von hWndFrom und hWndTo gespiegelt wird.) Das Wort mit hoher Ordnung ist die Anzahl der Pixel, die der vertikalen Koordinate jedes Quellpunkts hinzugefügt werden, um die vertikale Koordinate jedes Zielpunkts zu berechnen.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Rufen Sie SetLastError auf, bevor Sie diese Methode aufrufen, um einen Fehlerrückgabewert von einem legitimen Rückgabewert "0" zu unterscheiden.

Hinweise

Wenn hWndFrom oder hWndTo (oder beides) gespiegelte Fenster sind (d. h. WS_EX_LAYOUTRTL erweiterte Formatvorlage haben) und genau zwei Punkte in lpPoints übergeben werden, interpretiert MapWindowPoints diese beiden Punkte als RECT und tauscht möglicherweise automatisch die linken und rechten Felder dieses Rechtecks aus, um sicherzustellen, dass links nicht größer als rechts ist. Wenn eine andere Anzahl von Punkten als 2 in lpPoints übergeben wird, werden die Koordinaten der einzelnen Punkte von MapWindowPoints ordnungsgemäß zugeordnet. Wenn Sie also einen Zeiger auf ein Array mit mehr als einem Rechteck in lpPoints übergeben, erhalten die neuen Rechtecke möglicherweise ihr linkes Feld größer als rechts. Um die richtige Transformation der Rechteckkoordinaten zu gewährleisten, müssen Sie MapWindowPoints mit jeweils einem RECT-Zeiger aufrufen, wie im folgenden Beispiel gezeigt:


   RECT        rc[10];

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

Wenn Sie außerdem zwei unabhängige Punkte genau zuordnen müssen und nicht möchten, dass die RECT-Logik von MapWindowPoints auf sie angewendet wird, um das richtige Ergebnis zu gewährleisten, müssen Sie MapWindowPoints mit jeweils einem POINT-Zeiger aufrufen, wie im folgenden Beispiel gezeigt:


   POINT pt[2];

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h (einschließlich Windows.h)
Bibliothek User32.lib
DLL User32.dll
APIs ext-ms-win-ntuser-window-l1-1-2 (eingeführt in Windows 10, Version 10.0.10240)

Weitere Informationen

ClientToScreen

Koordinatenraum und Transformationsfunktionen

Übersicht über Koordinatenräume und Transformationen

PUNKT

RECT

ScreenToClient