WM_POINTERUP訊息
在視窗工作區上建立連絡人的指標中斷連絡人時張貼。 此輸入訊息會以指標建立接觸的視窗為目標,而指標在該時間點會隱含擷取至視窗,讓視窗繼續接收輸入訊息,包括指標 的WM_POINTERUP 通知,直到中斷接觸為止。
視窗會透過 其 WindowProc 函 式接收此訊息。
![重要]
傳統型應用程式應該是 DPI 感知。 如果您的 app 無法感知 DPI,則指標訊息和相關結構中包含的螢幕座標可能會因為 DPI 虛擬化而顯示不正確。 DPI 虛擬化可為非 DPI 感知且預設為作用中的應用程式提供自動縮放支援, (使用者可以將其關閉) 。 如需詳細資訊,請參閱 撰寫高 DPI Win32 應用程式。
#define WM_POINTERUP 0x0247
參數
-
wParam
-
包含指標的相關資訊。 使用下列宏從 wParam 參數擷取資訊。
GET_POINTERID_WPARAM (wParam) :指標識別碼。
IS_POINTER_NEW_WPARAM (wParam) :指出此訊息是否代表新指標所產生的第一個輸入的旗標。
IS_POINTER_INRANGE_WPARAM (wParam) :指出指標在其存留期內是否產生此訊息的旗標。 未在訊息上設定此旗標,指出指標具有左偵測範圍
IS_POINTER_INCONTACT_WPARAM (wParam) :指出此訊息是否由與視窗介面接觸的指標所產生旗標。 此旗標不會在指出暫留指標的訊息上設定。
IS_POINTER_PRIMARY_WPARAM (wParam) :表示此指標已指定為主要指標。
IS_POINTER_FIRSTBUTTON_WPARAM (wParam) :指出是否有主要動作的旗標。
- 這類似于滑鼠左鍵向下。
- 觸控指標在與數位板表面接觸時,將會有此設定。
- 當手寫筆指標與數位板表面接觸且未按下任何按鈕時,就會有此設定。
IS_POINTER_SECONDBUTTON_WPARAM (wParam) :指出是否有次要動作的旗標。
- 這類似于滑鼠右鍵向下。
- 當手寫筆指標與數位板表面接觸並按下手寫筆筆筒按鈕時,就會設定此指標。
IS_POINTER_THIRDBUTTON_WPARAM (wParam) :指出指標類型是否有一或多個第三個動作的旗標;想要回應第三個動作的應用程式必須擷取指標類型特定的資訊,以判斷按下哪三個按鈕。 例如,應用程式可以呼叫 GetPointerPenInfo 並檢查指定按鈕狀態的旗標,以判斷手寫筆的按鈕狀態。
IS_POINTER_FOURTHBUTTON_WPARAM (wParam) :指出指定的指標是否採取第四個動作的旗標。 想要回應第四個動作的應用程式必須擷取指標類型特定的資訊,以判斷是否按下第一個擴充滑鼠 (XButton1) 按鈕。
IS_POINTER_FIFTHBUTTON_WPARAM (wParam) :指出指定的指標是否採取第五個動作的 旗 標。 想要回應第五個動作的應用程式必須擷取指標類型特定的資訊,以判斷是否按下第二個擴充滑鼠 (XButton2) 按鈕。
如需詳細資訊 ,請參閱指標旗標 。
注意
暫留指標未設定任何按鈕旗標。 這類似于沒有滑鼠按鍵向下移動的滑鼠。 例如,應用程式可以呼叫 GetPointerPenInfo 並檢查指定按鈕狀態的旗標,來判斷暫留畫筆的按鈕狀態。
-
lParam
-
包含指標的點位置。
注意
因為指標可能會透過非簡單區域與裝置接觸,所以這個點位置可能是更複雜的指標區域簡化。 可能的話,應用程式應該使用完整的指標區域資訊,而不是點位置。
使用下列宏來擷取點的實體螢幕座標。
- GET_X_LPARAM (lParam) :x (水準點) 座標。
- GET_Y_LPARAM (lParam) :y (垂直點) 座標。
傳回值
如果應用程式處理此訊息,它應該會傳回零。
如果應用程式未處理此訊息,它應該呼叫 DefWindowProc。
備註
![重要]
當視窗失去指標的擷取,而且收到 WM_POINTERCAPTURECHANGED 通知時,通常不會收到任何進一步的通知。 基於這個理由,請務必不要根據平均配對的WM_POINTERDOWN/WM_POINTERUP或WM_POINTERENTER/WM_POINTERLEAVE通知進行任何假設。
每個指標在其存留期間都有唯一的指標識別碼。 指標的存留期會在第一次偵測到指標時開始。
如果偵測到暫留指標,就會產生 WM_POINTERENTER 訊息。 如果偵測到非暫留指標,就會產生 WM_POINTERDOWN訊息, 後面接著 WM_POINTERENTER 訊息。
在其存留期間,指標可能會在暫留或連絡時產生一系列 WM_POINTERUPDATE 訊息。
指標的存留期會在不再偵測到指標時結束。 這會產生 WM_POINTERLEAVE 訊息。
當指標中止時, 會設定POINTER_FLAG_CANCELED 。
當非擷取的指標超出視窗界限時,也可能會產生 WM_POINTERLEAVE 訊息。
若要取得指標的水準和垂直位置,請使用下列專案:
使用下列程式碼來取得水準和垂直位置:
xPos = GET_X_LPARAM(lParam);
yPos = GET_Y_LPARAM(lParam);
MAKEPOINTS宏也可以用來將 lParam 參數轉換成POINTS結構。
GetKeyState函式可用來判斷與此訊息相關聯的鍵盤修飾詞按鍵狀態。 例如,若要偵測已按下 ALT 鍵,請檢查 GetKeyState 是否 (VK_MENU) < 0。
如果應用程式未處理此訊息, DefWindowProc 可能會在來自這個 的輸入序列時產生一或多個 WM_GESTURE訊息,而且可能也會將其他指標辨識為手勢。 如果無法辨識手勢, DefWindowProc 可能會產生滑鼠輸入。
如果應用程式選擇性地取用一些指標輸入,並將其餘部分傳遞至 DefWindowProc,則產生的行為是未定義的。
使用 GetPointerInfo 函式來擷取與這個訊息相關的進一步資訊。
範例
下列程式碼範例示範如何擷取與這個訊息相關聯之指標的 x 和 y 位置。
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
// process pointer up, similar to mouse button up
下列程式碼範例示範如何取得與此訊息相關聯的指標識別碼。
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
// Retrieve common pointer information
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure, call GetLastError()
}
else
{
// success, process pointerInfo
}
下列程式碼範例示範如何處理與此訊息相關聯的不同指標類型。
POINTER_TOUCH_INFO touchInfo;
POINTER_PEN_INFO penInfo;
POINTER_INFO pointerInfo;
UINT32 pointerId = GET_POINTERID_WPARAM(wParam);
POINTER_TYPE pointerType = PT_POINTER;
// default to unhandled to enable call to DefWindowProc
fHandled = FALSE;
if (!GetPointerType(pointerId, &pointerType))
{
// failure, call GetLastError()
// set PT_POINTER to fall to default case below
pointerType = PT_POINTER;
}
switch (pointerType)
{
case PT_TOUCH:
// Retrieve touch information
if (!GetPointerTouchInfo(pointerId, &touchInfo))
{
// failure, call GetLastError()
}
else
{
// success, process touchInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
case PT_PEN:
// Retrieve pen information
if (!GetPointerPenInfo(pointerId, &penInfo))
{
// failure, call GetLastError()
}
else
{
// success, process penInfo
// mark as handled to skip call to DefWindowProc
fHandled = TRUE;
}
break;
default:
if (!GetPointerInfo(pointerId, &pointerInfo))
{
// failure.
}
else
{
// success, proceed with pointerInfo.
fHandled = HandleGenericPointerMessage(&pointerInfo);
}
break;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows 8 [僅限傳統型應用程式] |
最低支援的伺服器 |
Windows Server 2012 [僅限傳統型應用程式] |
標頭 |
|
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應