Dela via


Komma igång med Windows Touch-gester

I det här avsnittet beskrivs de grundläggande stegen för att använda multitouchgester.

Följande steg utförs vanligtvis när du använder Windows Touch-gester:

  1. Konfigurera ett fönster för att ta emot gester.
  2. Hantera gestmeddelandena.
  3. Tolka gestmeddelandena.

Konfigurera ett fönster för att ta emot gester

Som standard får du WM_GESTURE meddelanden.

Anteckning

Om du anropar RegisterTouchWindowslutar du att ta emot WM_GESTURE meddelanden. Om du inte får meddelanden WM_GESTURE, kontrollera att du inte har anropat RegisterTouchWindow.

 

Följande kod visar en enkel InitInstance-implementering.

#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;
}

Hantera gestmeddelanden

På samma sätt som du hanterar Indatameddelanden i Windows Touch kan du hantera gestmeddelanden på många sätt. Om du använder Win32 kan du söka efter meddelandet WM_GESTURE i WndProc. Om du skapar en annan typ av program kan du lägga till det WM_GESTURE meddelandet på meddelandekartan och sedan implementera en anpassad hanterare.

Följande kod visar hur gestmeddelanden kan hanteras.

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);            

Tolka gestmeddelanden

Funktionen GetGestureInfo används för att tolka ett gestmeddelande till en struktur som beskriver gesten. Strukturen, GESTUREINFO, har information om gesten, till exempel platsen där gesten utfördes och typen av gest. Följande kod visar hur du kan hämta och tolka ett gestmeddelande.

  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 Touch-gester