[部分資訊涉及預售產品,可能在商業發行前經過大幅修改。 Microsoft 對此處提供的資訊不作明示或暗示的任何保證。]
將指定的視窗或當前執行緒註冊為系統可觸控板使用。
語法
WINUSERAPI
BOOL
WINAPI
RegisterTouchpadCapableWindow(
_In_ HWND hWnd,
_In_ BOOL fEnable);
WINUSERAPI
BOOL
WINAPI
RegisterTouchpadCapableThread(
_In_ BOOL fEnable);
參數
RegisterTouchpadCapableWindow
- hWnd
-
視窗的把手可註冊或未註冊為可觸控板操作。
- fEnable
-
TRUE 以將視窗註冊為觸控板支援; FALSE 以取消註冊。
RegisterTouchpad CapableThread
- fEnable
-
TRUE 以將當前執行緒註冊為觸控板支援; FALSE 以取消註冊。
返回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。 若要取得擴充錯誤資訊,請呼叫 GetLastError。 如果系統不支援以觸控板功能註冊,或嘗試取消註冊執行緒而執行緒目前未註冊為有能力,註冊可能會失敗。
備註
註冊為觸控板功能後,以下系統功能將改變:
- GetPointerDevices 現在將在裝置清單中加入觸控板。
- GetCurrentInputMessageSource 對於觸控板起源的滑鼠訊息,會以 IMDT_TOUCHPAD 作為裝置類型回傳,而非 IMDT_MOUSE。
- RegisterPointerDeviceNotifications 會產生觸控板訊息(包括裝置的進出以及聯絡人在範圍內或外)。
- 視窗(或執行緒中的所有視窗)會收到 WM_POINTER 的觸控板雙指手勢訊息(平移與縮放)。
- 若這些訊息轉發至 DefWindowProc,系統現今對非觸控板視窗/執行緒所做的,將轉換為滑鼠滾輪訊息。
RegisterTouchpadCapableWindow — 註冊視窗為「最後呼叫者獲勝」——視窗的觸控板功能會根據最近一次呼叫API來啟用或停用。 預期視窗擁有者在初始化時會註冊為有能力——如果元件無法控制視窗如何處理隨後接收的 WM_POINTER 訊息,則不應將其註冊為有能力。
RegisterTouchpadCapableThread — 系統會記錄執行緒被註冊為有能力的次數,因此如果執行緒已註冊為有能力,則在不再需要時應自動取消註冊。 執行緒可以使用 RegisterTouchpadCapableThread 暫時註冊為有能力呼叫依賴行為的 API,然後取消註冊,以保留執行緒的原始狀態。
由於 GetPointerDevices 和 GetCurrentInputMessageSource 不取參數中的視窗,因此只有當整個執行緒支援觸控板時,行為才會改變,以避免在原本不知情的執行緒中選擇單一視窗時產生相容性問題。
這很重要
系統部分觸控板設定的行為是在互動情境 API 中實作,用於對指標輸入執行手勢辨識。 這些包括是否明確關閉了平移和/或縮放,以及平移時內容移動的方向。 未來的系統更新也可能帶來更多功能。 因此,強烈建議在註冊為觸控板支援並直接接收指標輸入時,使用互動情境 API 來進行手勢辨識,讓使用者在所有應用程式間都能體驗到一致的行為。 若不使用這些 API,請務必查詢使用者的觸控板設定,並尊重與手勢辨識相關的設定,若適用於應用程式的使用者體驗。 不過,新增系統設定需要應用程式更新——若使用 Interaction Context API,這些新設定將自動如預期運作。
具體來說,應使用新的 ProcessPointerFramesInteractionContext2 或 BufferPointerPacketsInteractionContext2 ,因為它們提供完整的指標載荷,而非僅POINTER_INFO。 未來手勢辨識的改進可能會考慮這些資訊。 WinRT PhysicalGestureRecognizer 類別在內部使用這些 API。
要求
| 需求 | 價值 |
|---|---|
| 最低支援的用戶端 | Windows 11 [僅限桌面應用程式] |
| 最低支援的伺服器 | 不支援 |
| Header | Winuser.h(包含 Windows.h) |
| 圖書館 | User32.lib |
| DLL | User32.dll(RegisterTouchpadCapableWindow的序數為2689,RegisterTouchpadCapableThread的序數為2688) |