Erste Schritte mit Windows-Touchgesten

In diesem Abschnitt werden die grundlegenden Schritte für die Verwendung von Multitouchgesten beschrieben.

Die folgenden Schritte werden in der Regel ausgeführt, wenn Windows-Touchgesten verwendet werden:

  1. Richten Sie ein Fenster für den Empfang von Gesten ein.
  2. Verarbeiten sie die Gestenmeldungen.
  3. Interpretieren sie die Gestenmeldungen.

Einrichten eines Fensters zum Empfangen von Gesten

Standardmäßig erhalten Sie WM_GESTURE Nachrichten.

Hinweis

Wenn Sie RegisterTouchWindow aufrufen, erhalten Sie nicht mehr WM_GESTURE Nachrichten. Wenn Sie keine WM_GESTURE-Nachrichten erhalten, stellen Sie sicher, dass Sie RegisterTouchWindow nicht aufgerufen haben.

 

Der folgende Code zeigt eine einfache InitInstance-Implementierung.

#include <windows.h>


BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Store instance handle in our global variable

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

Behandeln von Gestenmeldungen

Ähnlich wie bei der Behandlung von Windows Touch-Eingabenachrichten können Sie Gestenmeldungen auf viele Arten verarbeiten. Wenn Sie Win32 verwenden, können Sie in WndProc nach der WM_GESTURE Nachricht suchen. Wenn Sie einen anderen Anwendungstyp erstellen, können Sie der Nachrichtenzuordnung die WM_GESTURE Nachricht hinzufügen und dann einen benutzerdefinierten Handler implementieren.

Der folgende Code zeigt, wie Gestenmeldungen behandelt werden können.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message)
    {    
    case WM_GESTURE:
            // Insert handler code here to interpret the gesture.            
            return DecodeGesture(hWnd, message, wParam, lParam);            

Interpretieren der Gestenmeldungen

Die GetGestureInfo-Funktion wird verwendet, um eine Gestennachricht in eine Struktur zu interpretieren, die die Geste beschreibt. Die Struktur GESTUREINFO enthält Informationen zur Geste, z. B. den Ort, an dem die Geste ausgeführt wurde, und den Typ der Geste. Der folgende Code zeigt, wie Sie eine Gestenmeldung abrufen und interpretieren können.

  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-Touchgesten