[部分資訊涉及預售產品,可能在商業發行前經過大幅修改。 Microsoft 對此處提供的資訊不作明示或暗示的任何保證。]
向系統報告指定視窗內容是否處於慣性狀態。
語法
WINUSERAPI
BOOL
WINAPI
ReportWindowContentInertia(
HWND hWnd,
BOOL bStartInertia);
參數
- hWnd
-
一個視窗的把柄,該視窗正在報告其內容慣性狀態。
- bStartInertia
-
確實,視窗內容已進入慣性;報告慣性停止是錯誤的。
返回值
如果函式成功,則傳回非零的值。
如果此函式失敗,則傳回值為零。
備註
若視窗內容在輸入流結束後仍作後仍持續移動,則稱為「慣性」。 報告這個慣性,讓觸控板輸入能在適當時停止這個動作。
若視窗處於慣性狀態,系統會改變對觸控板輸入的反應:
- 新觸控板輸入抵達後不久,系統會將 WM_STOPINERTIA 傳送到視窗。 應用程式應對此訊息做出反應,停止內容的運動,但若有針對重複手勢操作相同內容的優化(例如偏好慣性內容的測試輸入,或記憶現有內容速度),則不必然從「慣性狀態」轉換出來。
- 如果系統判定觸控板輸入試圖停止內容動作,系統會將 WM_ENDINERTIA 傳送到視窗。 應用程式應對此訊息做出反應,停止內容的運動並退出「慣性」狀態。
範例案例:
- 使用者只需快速點擊: WM_ENDINERTIA 就發送出去。 滑鼠輸入不會產生——點擊只會結束慣性。
- 使用者用手指按住觸控板,然後抬起: WM_STOPINERTIA 接著 WM_ENDINERTIA。
- 使用者只需快速做兩指手勢:無慣性訊息。 重複的手勢是為了避免無謂地中斷內容而被處理。
- 使用者在觸控板上按住一根(或兩根)手指,然後做出兩指手勢: WM_STOPINERTIA。 在執行動作前停留,使用者可能會試圖停止內容。
雖然大多數情況下,接收 WM_STOPINERTIA 後會接著 WM_ENDINERTIA 或其他觸控板手勢,但並非保證。 若應用程式在收到 WM_STOPINERTIA時實作特殊內容狀態,該狀態應在一段時間後退出。 同樣地,如果觸控板輸入流較短, WM_ENDINERTIA 前不一定有 WM_STOPINERTIA 。
報告慣性對於正確處理觸控板輸入非常重要。 如果視窗內容處於慣性狀態且未向系統回報,點擊觸控板會產生正常點擊行為(滑鼠左下與左上)。 應用程式可能會將滑鼠輸入視為與動態內容互動,可能導致使用者執行非預期的動作。
對於觸碰或筆輸入引起的慣性,系統不需要特別處理與慣性的輸入,因為內容處於慣性的視窗通常是接收後續輸入的視窗。 相反地,觸控板輸入則是在應用程式收到任何輸入前就做出決策。 仍建議報告因觸控或筆輸入引起的慣性,這樣使用者若嘗試用觸控板停止慣性,便會依預期行為發生。
系統只會追蹤一個慣性視窗。 如果在呼叫此 API 以報告從不同視窗開始的慣性時,慣性已經啟動,先前的慣性資訊將會被替換。
若報告慣性啟動,指定視窗必須由當前執行緒擁有,且執行緒必須在過去兩秒內取得輸入。 當視窗的內容動作停止時,該視窗應被回報為停止(除非視窗收到 WM_STOPINERTIA 或 WM_ENDINERTIA,此時無需報告慣性停止)。 若系統不再追蹤慣性、追蹤視窗與指定視窗不符,或追蹤視窗屬於其他程序,則報告慣性停止將被靜默忽略。
要求
| 需求 | 價值 |
|---|---|
| 最低支援的用戶端 | Windows 11 [僅限桌面應用程式] |
| 最低支援的伺服器 | 不支援 |
| Header | Winuser.h(包含 Windows.h) |
| 圖書館 | User32.lib |
| DLL | User32.dll(序數 2695) |