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」でも利用できます。つまり、操作性だけでなく、視覚的にも高度なユーザーインターフェイスを提供できるわけです。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.
よく読まれている編集記者コラム