這個語言參考部分包含了對觸摸事件、手勢、以及手勢動畫等編程元素的描述。
觸摸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進行了封裝,開源提供了他們的托管代碼版本。你可以到這裡下載Dll或源碼,Alex Yakhnin的博客頁面上也提供了相應的WebCast視頻教程鏈接。