共用方式為


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

lpPoints 參數所指向之數位列中的 POINT 結構數目。

傳回值

如果函式成功,則傳回值的低序字是新增至每個來源點水準座標的像素數,以計算每個目的地點的水準座標。 (此外,如果確切的其中一個 hWndFromhWndTo 鏡像,則每個產生的水準座標乘以 -1.) 高序字是新增至每個來源點垂直座標的像素數目,以計算每個目的地點的垂直座標。

如果此函式失敗,則傳回值為零。 呼叫此方法之前呼叫 SetLastError ,以區分錯誤傳回值與合法的 「0」 傳回值。

備註

如果 hWndFromhWndTo (或兩個) 都是鏡像視窗 (,請 WS_EX_LAYOUTRTL 擴充樣式) ,而且精確地傳遞兩個點在 lpPoints 中, MapWindowPoints 會將這兩個點解譯為 RECT ,而且可能會自動交換該矩形的左字段和右字段,以確保左邊不大於右。 如果 2 以外的任何點數都傳入 lpPoints則 MapWindowPoints 會分別正確對應每個點的座標,因此,如果您在 lpPoints 中傳入一個以上的矩形陣列指標,新的矩形可能會得到大於右邊的左字段。 因此,若要保證矩形座標的正確轉換,您必須一次使用一個 RECT 指標呼叫 MapWindowPoints,如下列範例所示:


   RECT        rc[10];

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

此外,如果您需要精確對應兩個獨立點,而且不想讓 MapWindowPoints 套用 RECT 邏輯,以確保一次呼叫 MapWindowPoints 與一個 POINT 指標的正確結果,如下列範例所示:


   POINT pt[2];

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

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 winuser.h (包括 Windows.h)
程式庫 User32.lib
Dll User32.dll
API 集合 ext-ms-win-ntuser-window-l1-1-2 (於 Windows 10 10.0.10240 版)

另請參閱

ClientToScreen

座標空間和轉換函式

座標空間和轉換概觀

矩形

ScreenToClient