連載
» 2010年05月06日 00時00分 公開

ココが変わったWindows Embedded CE 6.0 R3(3):CE端末でも「フリック」&「パン」操作が可能に! ― タッチ/ジェスチャ機能 ― (2/2)

[杉本拓也(株式会社富士通ソフトウェアテクノロジーズ),@IT MONOist]
前のページへ 1|2       

シングルジェスチャAPIについて

 CE 6.0 R3で提供されるジェスチャ機能をアプリケーションで受け取るためには、「WM_GESTURE」を処理する必要があります。

 アプリケーションは、必要なコンポーネントを追加したOS上であれば、ジェスチャのメッセージ「WM_GESTURE」を受け取ることができます。「WM_GESTURE」を受け取るためには、自身のウィンドウでジェスチャ操作を可能にするための関数「EnableGestures()」を呼び出す必要があります。

 「EnableGestures()」の第1パラメータには自身の「ウィンドウハンドル」、第2パラメータには受け取る「ジェスチャの種類」、そして第3パラメータにはジェスチャを受け取る指定が「ウィンドウ単位(TGF_SCOPE_WINDOW)」なのか、「プロセス単位(TGF_SCOPE_PROCESS)」なのかを指定します。ちなみに、「TGF_SCOPE_PROCESS」が指定された場合には、第1パラメータのウィンドウハンドルは無視されます。

 「EnableGestures()」を指定すると、ウィンドウに「WM_GESTURE」が送られてきます(表3)。

WM_GESTURE
説明:ジェスチャエンジンがジェスチャを開始、処理中にアプリケーションに通知するメッセージ

パラメータ
wParam ジェスチャコマンドID
lParam GESTUREINFOへのハンドル
表3 WM_GESTUREについて

 「WM_GESTURE」のパラメータ「wParam」には、ジェスチャのコマンドIDが指定されます。コマンドIDには、下記のような種類があります(表4)。

ID 説明
GID_BEGIN ジェスチャの開始
GID_DOUBLESELECT ダブルタップ
GID_END ジェスチャの終了
GID_HOLD ホールド
GID_PAN パン
GID_SCROLL フリック
GID_SELECT タップ
表4 ジェスチャのコマンドIDの種類

 また、「WM_GESTURE」のもう1つのパラメータ「lParam」には、「GESTUREINFO」へのハンドルが格納されています。この「GESTUREINFO」を参照することで、ジェスチャのより詳細なデータが得られます。このとき、「lParam」に指定される「GESTUREINFO」のハンドルは、「CloseGestureInfoHandle()」によってクローズする必要があります。

 上記のようなメッセージデータを利用して、ジェスチャを処理できます。以下に、簡単なサンプルコードを示します(サンプルコード1)。

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        switch (message){
        case WM_CREATE:
                //ジェスチャの登録
                EnableGestures(hWnd, TGF_GID_ALL,TGF_SCOPE_PROCESS);
                break;
 
        case WM_GESTURE:
                switch(wParam){
                case GID_BEGIN:
                        //ジェスチャ開始...
                        break;
                case GID_DOUBLESELECT:
                        //ダブルタップ...
                        break;
                case GID_END:
                        //ジェスチャ終了...
                        break;
                case GID_HOLD:
                        //ホールド...
                        break;
                case GID_PAN:
                        //パン...
                        break;
                case GID_SCROLL:
                        //フリック...
                        break;
                case GID_SELECT:
                        //タップ...
                        break;
                }
 
                //HGESTUREINFOの開放
                CloseGestureInfoHandle((HGESTUREINFO)lParam);
                return 1;
 
        default:
                return DefWindowProc(hWnd, message, wParam, lParam);
 
        }
        return 0;
} 
サンプルコード1 ジェスチャのサンプル



 以上、ジェスチャAPIの一部について解説しました。CE 6.0 R3のジェスチャAPIについてもっと深く理解したい方は、「MSDN Gesture Reference」を参照してみてください。

 今回紹介したCE 6.0 R3のジェスチャ機能を使うことで、デバイスのタッチ操作を向上させることができます。

 例えば、カーナビで目的地を検索したら検索結果が多く表示されてしまったとします。これまでですと、物理的なボタンなどで画面をスクロールしていましたが、自動車での利用を考えると非常に不便でした。これが、CE 6.0 R3を搭載したタッチパネル式のカーナビに置き換わったらどうでしょうか。検索結果のリストをフリック操作するだけで素早くスクロールできますし、地図表示画面ではパン操作で表示位置を簡単に変更できます。

 さらに、このジェスチャ機能は前回紹介した「Silverlight for Windows Embedded」でも利用できます。つまり、操作性だけでなく、視覚的にも高度なユーザーインターフェイスを提供できるわけです。(次回に続く)

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.