iT邦幫忙

DAY 30
2

Windows Mobile系列 第 30

[Windows Mobile]Gestures API 擷取使用者的手勢

  • 分享至 

  • xImage
  •  

手勢 Gestures 在行動裝置上越來越重要,使用者可在行動裝置,透過觸控筆(滑鼠),透過不同的手勢動作來執行命令,在 Windows Mobile 6.5 的 new feature 中,就包含了 Gestures API (另一個是 Widget),本文介紹 Windows Mobile 6.5 Developer Tool 中 Gestures API Sample Code。
更多文章,請到我在點部落所建立的部落格「.NET菜鳥自救會」閱讀
http://www.dotblogs.com.tw/chou/

  1. 簡介
    手勢 Gestures 在行動裝置上越來越重要,使用者可在行動裝置,透過觸控筆(滑鼠),透過不同的手勢動作來執行命令,在 Windows Mobile 6.5 的 new feature 中,就包含了 Gestures API (另一個是 Widget),本文介紹 Windows Mobile 6.5 Developer Tool 中 Gestures API Sample Code。

  2. Gestures API
    2.1 Touch Gestures
    Touch Gestures 是當使用者在螢幕上,透過手指或觸控筆做短暫且具方向性的描繪動作,根據其動作,產生相對應的事件,最簡單的就是對螢幕做一次敲擊,而在做敲擊的動作中,手指按下 ( WM_LBUTTONDOWN) 與手指離開( WM_LBUTTONUP) 時就會產生事件。而在手指按下與離開的這段期間,手指移動的方向(帶正負)、位置與速度,透過手勢辨識產生相對應的事件,Gestures API 支援五種不同的手勢訊息。
    (1) Tap : 代表滑鼠左鍵單擊,事件 GID_SELECT
    (2) Double Tap : 代表滑鼠左鍵雙擊,事件 GID_DOUBLESELECT
    (3) Hold : 使用者觸控筆觸控螢幕並保持狀態,代表滑數右鍵,事件 GID_HOLD
    (4) Flick : 使用者在螢幕透過手指做單一像素滑動,當速度夠快時,則產生捲動,事件 GID_SCROLL -> GID_END
    (5) Pan : 使用者觸控且在螢幕上隨意移動,代表滑鼠移動,事件 GID_PAN -> GID_END

*註 : 相關事件可參考 GESTUREINFO
想要使用 Gestures API,需 include 一些標頭檔,主要是以下三個

#include <gesture.h>
#include <GesturePhysicsEngine.h>
#include <WindowAutoGesture.h>

檔案位置在 C:\Program Files\Windows Mobile 6 SDK\PocketPC\Include\Armv4i

2.2 WM_GESTURE 訊息
以下程式碼為取得 WM_GESTURE 訊息的基礎程式,且透過 switch 方式,當取得 Gestures 訊息時所對應哪些處理。

//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
LRESULT CALLBACK WndProca(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    BOOL fHandled = FALSE; 
    GESTUREINFO gi = {sizeof(gi)};
    // Go get the gesture - will return FALSE if the gesture engine is not present in the system.
    if (TKGetGestureInfo(reinterpret_cast<HGESTUREINFO>(lParam), &gi))
    {
        switch(wParam)
        {
        case GID_HOLD:
            break;

        case GID_SELECT:
            break;

        case GID_DOUBLESELECT:
            break;

        case GID_PAN:
            break;
        }

        if (!fHandled)
        {
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
    }
    return 0;
}

2.3 Gesture Metrics Sample
以下影片是執行 Gesture Metrics Sample 範例程式,一開始觸控螢幕,並且保持不動,產生 GID_HOLD 訊息,接著單擊螢幕,產生 GID_SELECT 訊息,最後雙擊螢幕,產生 GID_DOUBLESELECT訊息。

http://www.youtube.com/watch?v=qs_fzupt_qM

在此範例程式,使用 WM_GESTURE 中的 GID_SELECT, GID_HOLD, GID_SELECT 和 GID_DOUBLESELECT訊息,當使用者觸控螢幕時,有三種情形
(1) GID_HOLD
使用者觸控螢幕時,於 OnLButtonDown 事件中,StartTimer(hWnd, ID_HOLD_TIMER); 於 WndProc 接收 WM_GESTURE 訊息,當訊息為 GID_HOLD 時,則 KillTimers(hWnd); // ID_HOLD_TIMER,並於畫面顯示 HOLD DETECTED
(2) GID_SELECT
於 WndProc 接收 WM_GESTURE 訊息,當訊息為 GID_SELECT 時,透過 TKGetGestureInfo 取得結構與細節,顯示 SELECT DETECTED,StartTimer(hWnd, ID_DOUBLESELECT_TIMER);
(3) GID_DOUBLESELECT
於 WndProc 接收 WM_GESTURE 訊息,當訊息為 GID_DOUBLESELECT 時 檢測到是GID_DOUBLESELECT,則 KillTimers(hWnd); // ID_DOUBLESELECT_TIMER,並顯示 DOUBLE SELECT DETECTED。


上一篇
[Windows Mobile]設定 TextBox 的輸入法狀態
下一篇
[Windows Mobile]下載與安裝模擬器
系列文
Windows Mobile41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言