這個語言參考部分包含了對觸摸事件、手勢、以及手勢動畫等編程元素的描述。
觸摸API分為兩個部分,管理觸摸輸入的手勢API,和控制顯示地區如何對使用者觸摸作出反應的手勢物理引擎API。
觸摸函數、訊息、以及結構體是與滑鼠共用的,因為應用程式像處理滑鼠左鍵單擊一樣處理手寫筆事件。想瞭解其他觸摸參考資訊,請轉到滑鼠參考。
索引
觸摸手勢 介紹視窗觸摸,並討論如何在你的應用程式中實現觸摸介面。
手勢參考(DTK) 這個API允許你的程式監視觸摸輸入並對觸摸輸入進行編程。
物理引擎概覽 介紹了物理引擎,以及在實現物理借口的時候如何使用它。
物理引擎參考(DTK) 這個API控制螢幕如何對觸摸輸入作出響應,並允許你的應用程式像Shell一樣響應觸摸。
觸摸手勢
觸摸手勢被描述為你的手指或手寫筆在螢幕上的控制項或對象上作出的短暫、定向移動。大部分的手勢是一個獨立的點擊。因此,他們都相當於一個finger?down(WM_LBUTTONDOWN)和finger?up (WM_LBUTTONUP)對。例外的是Double Tap,它包含兩對短暫連續的finger?down(WM_LBUTTONDOWN)和finger?up (WM_LBUTTONUP)。手勢的識別基於finger?down 和 finger?up事件,再加上方向、位置和被手勢辨識器計算出的速度。Windows Mobile支援如下五種手勢。
手勢描述
TapTap表現為滑鼠的左鍵單擊。
當一個finger?down事件和一個finger?up事件在規定的時間段、特定的距離發生時,應用程式就會收到一個單獨的GID_SELECT手勢訊息。在WM_LBUTTONDOWN事件之後,GID_SELECT訊息之前,可能會有幾個WM_MOUSEMOVE訊息。
Double TapDouble Tap表現為滑鼠的左鍵雙擊。
當兩個finger?up事件在規定的時間段、特定的距離內發生時,應用程式會收到一個GID_DOUBLESELECT訊息。
Hold使用者可以在螢幕上按下並保持不動以表示滑鼠右擊。
當手指保持按下超過規定的時間,並且所有的點都在特定距離內時,應用程式會收到一個GID_HOLD訊息。當手指抬起或Hold時間達到界限時,會緊跟著一個GID_END訊息。
Flick使用者可以移動手指划過螢幕以開始逐像素滾動,並且如果移動足夠快的話,滾動在手指抬起後仍會繼續。
在手指的滑動結束時,應用程式會收到一個獨立的GID_SCROLL手勢訊息。Flick會頻繁的發生在Pan之後(一個或多個GID_PAN訊息之後,緊跟著一個GID_SCROLL訊息,然後是一個GID_END訊息)。
Pan使用者可以在螢幕上按下手指並保持按下狀態,然後向任何方向拖動手指以表示滑鼠拖動事件。
當手指位置改變的時候應用程式會收到一個或多個GID_PAN訊息,緊接著在手指抬起時會收到一個GID_END訊息。滑鼠訊息是和手勢訊息交替的。 Panning可以在Hold手勢之後發生。
想瞭解更多關於GID_*的手勢訊息,請參考GESTUREINFO。
手勢識別引擎的系統架構是由一個附加了已存在的觸摸事件的手勢識別狀態機器組成的。觸摸事件從Touch Screen Drivers傳送到狀態機器中。當手勢被識別的時候,一個視窗訊息就會被發送到目標進程的訊息佇列中。
注意:呼叫SetCapture會改變手勢的目標視窗。
手勢事件通常在任何finger?up前被傳遞,從而使接收者可以通過調用TKGetGestureInfo並取消任何針對finger?up觸摸事件的計划動作來處理這個手勢。
視窗自動手勢
自動手勢使視窗內的控制項和應用程式能自動處理Flick和Pan手勢。你可以通過使用函數TKSetWindowAutoGesture 和 TKGetWindowAutoGesture來控制手勢處理。自動手勢使將要發送給視窗程序的活動訊息來管理Flick和Pan的交叉觸發。你可以通過調用TKGetAnimateMessageInfo來取回這些訊息。
手勢參考(DTK)
視窗自動手勢使視窗中的內容能夠對Flick和Pan手勢作出自動滾動的響應。這個語言參考部分包含了對這個技術編程要點的描述。
本節內容
手勢函數(DTK) 提供了對觸摸手勢相關函數的概覽。
手勢結構體(DTK) 提供了對觸摸手勢相關結構體的概述。
手勢宏(DTK) 提供了對觸摸手勢相關的宏的概述。
手勢常數(DTK) 提供了對手勢相關函數的概述。
手勢訊息(DTK) 提供了對觸摸手勢相關訊息的概述。
手勢常數(DTK)
下面的常數作為GESTUREINFO結構體使用的命令。
名字值描述
GID_BEGIN1包含了標識觸摸手勢開始點的座標。當螢幕被觸摸時被發送。。
GID_END2包含了標識觸摸手勢結束點的座標。當手指或手寫筆離開螢幕時被發出。
GESTUREINFO的參數域經常被這個命令置為零。
GID_PAN4當使用者按在視窗上,保持手指和螢幕接觸並向任意方向移動時,Pan就會發生。識別引擎會發送一個包含起始位置及當前位置的GID_PAN訊息。對每一個滑鼠移動訊息,都會發送一個新的GID_PAN訊息,直到手指或手寫筆離開視窗。
GID_END被用於標識Pan移動的結束位置。
應用程式能夠從兩個連續的Pan手勢之間的不同上計算出移動的軌跡。
如果GF_INERTIA標誌被設定的話,GESTUREINFO的參數域的值就和GID_SCROLL是相同的。
GID_SCROLL8當使用者在視窗上按下(或者划過螢幕),然後在手指或手寫筆抬起之前迅速向任意方向移動時,Scroll就會發生。
識別引擎在Flick手勢之後會發出GID_SCROLL訊息。
GID_SCROLL被發送給接收當前觸摸會話的第一個手勢訊息,如Pan訊息或Hold訊息的視窗。
GESTUREINFO的參數域包含了關於角度、方向及Flick速度的資訊。
核心的方向用以下的值來表示:
ARG_SCROLL_NONE
ARG_SCROLL_RIGHT
ARG_SCROLL_UP
ARG_SCROLL_LEFT
ARG_SCROLL_DOWN 當裝置旋轉時,手勢會進行調整以適應旋轉。
Flick的角度用0~65535的值來度量。
下面的宏從原始角度中提取角度、方向和速度:
GID_SCROLL_ANGLE
GID_SCROLL_DIRECTION
GID_SCROLL_VELOCITY
你可以用下面的宏在角度和弧度之間進行轉換:GID_ROTATE_ANGLE_TO_ARGUMENT
GID_ROTATE_ANGLE_FROM_ARGUMENT
GID_HOLD9當使用者在視窗上按下並保持手指或手寫筆不動比Hold逾時時間長時,Hold就會發生。
識別引擎會發送一個GID_HOLD手勢訊息,並且在手指或手寫筆抬起時緊跟著一個GID_END訊息。
Hold手勢之後可以緊跟著一個產生若干GID_PAN訊息的Pan移動,但是GID_HOLD訊息是從來不會發生在GID_PAN訊息之後的。
GID_SELECT10當使用者用手指或手寫筆拍擊螢幕並且事件短於Select逾時時間時,Selection就會發生。
GESTUREINFO的參數域對這個命令是停用。
GID_DOUBLESELECT11當使用者在少於特定的DOUBLESELECT逾時時間內用手指或手寫筆點擊螢幕兩次時,Selection就會發生。這個逾時時間在連續的滑鼠彈起事件之間。
GESTUREINFO的參數域對這個命令是停用。
手勢函數(DTK)
手勢宏(DTK)
手勢訊息(DTK)
手勢結構體(DTK)
2010.4.12 補充說明:
本來準備完整翻譯這篇文檔,可是今天突然發現這篇文檔已經有朋友譯過了。那我就沒有必要再重複製造輪子,給互連網製造資訊垃圾了。因此這篇文檔的翻譯就到此為止,不再繼續了。
要看完整譯文請轉到部落格園這位朋友的部落格Windows Mobile Space。 當然,這個主要針對本地代碼開發,因為Gesture API是一個本地API。
微軟的兩位工程師(Alex Yakhnin, Ron Buckton)對這兩個本地API進行了封裝,開源提供了他們的Managed 程式碼版本。你可以到這裡下載Dll或源碼,Alex Yakhnin的部落格頁面上也提供了相應的WebCast視頻教程連結。