共用方式為


架構概觀

此架構概觀提供適用于平板電腦和觸控技術的 Windows Touch API 內容,並說明其如何融入較大的 Windows 7 架構。

Windows Touch 輸入和手勢的訊息

Windows Touch 的傳訊功能是透過在執行期間接聽和解譯訊息來啟用。 下圖顯示如何從硬體產生訊息,並由 Windows 7 傳送至應用程式。

顯示 Windows 7 如何將多觸控硬體的訊息傳送至應用程式的圖例

在圖例最左邊的資料行中,觸控式硬體會接收使用者的輸入。 然後,驅動程式會在硬體與 OS 之間進行通訊。 接下來,OS 會產生 WM_TOUCHWM_GESTURE 訊息,然後傳送至應用程式的 HWND。 然後,應用程式會根據訊息中封裝的資訊來更新 UI。

應用程式預設會接收手勢。 除非應用程式向 RegisterTouchWindow 函式註冊 Windows Touch 輸入訊息,否則 Windows 會建立手勢通知 (WM_GESTURE 訊息) ,並傳送至該應用程式視窗。 如果應用程式視窗註冊接收觸控訊息,則會將 Windows Touch 輸入 (WM_TOUCH 訊息) 的通知傳送至該應用程式視窗。 Windows Touch 和手勢訊息在進行觸控或手勢開始于應用程式視窗之後,所有訊息都會傳送至該應用程式,直到手勢完成或主要觸控完成為止。

針對舊版支援,Windows 會在訊息反升時解譯 WM_GESTURE 訊息,然後傳送或 POST 對應至手勢的適當訊息。 若要避免中斷舊版支援,請務必使用 DefWindowProc轉送WM_GESTURE訊息。 如需舊版支援的詳細資訊,請參閱 Windows Touch 手勢概觀一節。

操作和慣性

Windows Touch 程式設計人員必須能夠以對進行手勢有意義的方式解譯來自多個來源的手勢。 Microsoft 提供操作 API 來執行這些計算。 操作基本上是具有相關值的手勢,這些值會描述整個手勢。 將輸入資料連線到操作處理器之後,您可以擷取使用者對 物件所做的動作相關資訊。 下圖顯示您可以使用操作的其中一種方式。

此圖顯示傳遞至物件操作處理器的 Windows 觸控訊息,這些訊息會使用 -imanipulationevents 介面處理事件

在圖例的左上方,使用者已觸碰到畫面,這會建立觸控訊息。 這些訊息包含 x 座標和 Y 座標,用來判斷焦點的物件。 焦點中的 物件包含操作處理器。 接下來,在具有TOUCHEVENTF_UP旗標的WM_TOUCH訊息上,會選取使用者焦點中的物件、參考操作處理器,並將訊息傳送至操作處理器。 後續 WM_TOUCH 與此連絡人相關聯的訊息會傳送至操作處理器,直到收到具有 TOUCHEVENTF_UP 旗標的 WM_TOUCH 訊息,並取值選取的物件為止。 在圖例的右下區段中,實作 _IManipulationEvents 介面的操作事件接收是用來處理在建立觸控訊息時引發的操作事件。 事件接收可以根據發生操作事件來執行介面的更新。

在 Windows Touch 應用程式中,通常會納入簡單的物理,讓物件順暢地到達停止,而不是在不再接觸物件時突然停止。 Microsoft 提供慣性 API 來執行這些簡單物理的計算,讓應用程式的行為類似于其他應用程式。 這也可讓您省下建立強固物理功能所需的心力。 下圖顯示如何使用慣性。

此圖顯示傳遞至物件 iinertiaprocessor 介面的 Windows 觸控訊息,它會使用 -imanipulationevents 介面引發事件

請注意慣性與操作之間的相似性。 這兩者的唯一差異在於,在慣性的情況下,解譯的訊息會交給慣性處理器,而不是操作處理器,而慣性處理器會引發事件。 在圖例的左上方,使用TOUCHEVENTF_UP旗標的WM_TOUCH訊息,使用觸控訊息來識別焦點中的物件,其中包含慣性處理器和操作處理器。 後續 WM_TOUCH 訊息會傳送至操作處理器,而操作處理器會執行應用程式 UI 的更新。 操作完成之後,會使用操作中的速度值來設定慣性處理器。 如中間資料行所示,在IInertiaProcessor介面上使用計時器或其他迴圈在個別執行緒中呼叫ProcessProcessTime方法,直到呼叫指出處理器完成處理為止。 進行這些呼叫時,會引發操作事件,這些事件是由操作事件接收根據 _IManipulationEvents 介面來處理。 在圖例的右下方區段,此事件接收會根據事件接收中的事件處理常式執行應用程式 UI 的更新。

程式設計指南