GESTUREINFO 構造体 (winuser.h)

ジェスチャに関する情報を格納します。

構文

typedef struct tagGESTUREINFO {
  UINT      cbSize;
  DWORD     dwFlags;
  DWORD     dwID;
  HWND      hwndTarget;
  POINTS    ptsLocation;
  DWORD     dwInstanceID;
  DWORD     dwSequenceID;
  ULONGLONG ullArguments;
  UINT      cbExtraArgs;
} GESTUREINFO, *PGESTUREINFO;

メンバー

cbSize

この構造体のサイズ (バイト単位)。 呼び出し元はこれを に設定する sizeof(GESTUREINFO)必要があります。

dwFlags

ジェスチャの状態。 詳細については、次を参照してください。 解説します。

dwID

ジェスチャ コマンドの識別子。

hwndTarget

このジェスチャの対象となるウィンドウへのハンドル。

ptsLocation

ジェスチャに関連付けられた座標を含む POINTS 構造体。 これらの座標は、常に画面の原点に対して相対的です。

dwInstanceID

構造体に対して内部的に使用される識別子。

dwSequenceID

シーケンスの内部的に使用される識別子。

ullArguments

8 バイトに収まるジェスチャの引数を含む 64 ビット符号なし整数。

cbExtraArgs

このジェスチャに付随する余分な引数のサイズ (バイト単位)。

解説

ullArguments メンバーの HIDWORD は常に 0 ですが、次の例外があります。

  • GID_PANの場合、慣性がある場合を除き、0 になります。 GF_INERTIAが設定されている場合、HIDWORD は慣性ベクトル (2 つの 16 ビット値) です。
  • GID_PRESSANDTAPの場合は、2 つのポイント間の距離です。
GESTUREINFO 構造体は、ジェスチャ情報構造体へのハンドルを GetGestureInfo 関数に渡すことによって取得されます。

次のフラグは、ジェスチャのさまざまな状態を示し、 dwFlags に格納されます。

名前 説明
GF_BEGIN 0x00000001 ジェスチャが開始中です。
GF_INERTIA 0x00000002 ジェスチャによって慣性がトリガーされました。
GF_END 0x00000004 ジェスチャが完了しました。
 
メモ ほとんどのアプリケーションでは、 GID_BEGIN を無視して メッセージをGID_END し、 DefWindowProc に渡す必要があります。 これらのメッセージは、既定のジェスチャ ハンドラーで使用されます。 GID_BEGINメッセージとGID_END メッセージがサード パーティ製アプリケーションによって使用される場合、アプリケーションの動作は未定義です。
 
次の表は、ジェスチャのさまざまな識別子を示しています。
Name 説明
GID_BEGIN 1 ジェスチャが開始中です。
GID_END 2 ジェスチャが終了しています。
GID_ZOOM 3 ズーム ジェスチャ。
GID_PAN 4 パン ジェスチャ。
GID_ROTATE 5 回転ジェスチャ。
GID_TWOFINGERTAP 6 2 本指のタップ ジェスチャ。
GID_PRESSANDTAP 7 ジェスチャを押してタップします。
 
メモGID_PANジェスチャには慣性が組み込まれています。 パン ジェスチャの最後に、オペレーティング システムによって追加のパン ジェスチャ メッセージが作成されます。
 
GESTUREINFO 構造体への定数ポインターを表すために、次の型が定義されています。

    typedef GESTUREINFO const * PCGESTUREINFO;	 

  LRESULT DecodeGesture(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    // Create a structure to populate and retrieve the extra message info.
    GESTUREINFO gi;  
    
    ZeroMemory(&gi, sizeof(GESTUREINFO));
    
    gi.cbSize = sizeof(GESTUREINFO);

    BOOL bResult  = GetGestureInfo((HGESTUREINFO)lParam, &gi);
    BOOL bHandled = FALSE;

    if (bResult){
        // now interpret the gesture
        switch (gi.dwID){
           case GID_ZOOM:
               // Code for zooming goes here     
               bHandled = TRUE;
               break;
           case GID_PAN:
               // Code for panning goes here
               bHandled = TRUE;
               break;
           case GID_ROTATE:
               // Code for rotation goes here
               bHandled = TRUE;
               break;
           case GID_TWOFINGERTAP:
               // Code for two-finger tap goes here
               bHandled = TRUE;
               break;
           case GID_PRESSANDTAP:
               // Code for roll over goes here
               bHandled = TRUE;
               break;
           default:
               // A gesture was not recognized
               break;
        }
    }else{
        DWORD dwErr = GetLastError();
        if (dwErr > 0){
            //MessageBoxW(hWnd, L"Error!", L"Could not retrieve a GESTUREINFO structure.", MB_OK);
        }
    }
    if (bHandled){
        return 0;
    }else{
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
  }

要件

   
サポートされている最小のクライアント Windows 7 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 R2 [デスクトップ アプリのみ]
Header winuser.h (Windows.h を含む)

関連項目

GetGestureInfo

構造体

Wm_gesture