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 結構數目。
傳回值
如果函式成功,則傳回值的低序字是新增至每個來源點水準座標的像素數,以計算每個目的地點的水準座標。 (此外,如果確切的其中一個 hWndFrom 和 hWndTo 鏡像,則每個產生的水準座標乘以 -1.) 高序字是新增至每個來源點垂直座標的像素數目,以計算每個目的地點的垂直座標。
如果此函式失敗,則傳回值為零。 呼叫此方法之前呼叫 SetLastError ,以區分錯誤傳回值與合法的 「0」 傳回值。
備註
如果 hWndFrom 或 hWndTo (或兩個) 都是鏡像視窗 (,請 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 版) |