Поделиться через


начало работы с помощью сенсорных жестов Windows

В этом разделе описаны основные шаги по использованию мультисенсорных жестов.

При использовании жестов Windows Touch обычно выполняются следующие действия.

  1. Настройка окна для получения жестов.
  2. Обработка сообщений жестов.
  3. Интерпретировать сообщения жестов.

Настройка окна для получения жестов

По умолчанию вы получаете WM_GESTURE сообщений.

Примечание

Если вы вызовете RegisterTouchWindow, вы перестанете получать WM_GESTURE сообщения. Если вы не получаете WM_GESTURE сообщений, убедитесь, что вы не вызывали RegisterTouchWindow.

 

В следующем коде показана простая реализация InitInstance.

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

Обработка сообщений жестов

Аналогично обработке входных сообщений Windows Touch, сообщения жестов можно обрабатывать разными способами. Если вы используете Win32, вы можете проверка для сообщения WM_GESTURE в WndProc. При создании приложения другого типа можно добавить сообщение WM_GESTURE на карту сообщений, а затем реализовать пользовательский обработчик.

В следующем коде показано, как можно обрабатывать сообщения жестов.

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

Интерпретация сообщений жестов

Функция GetGestureInfo используется для интерпретации сообщения жеста в структуру, описывающую жест. Структура , GESTUREINFO, содержит сведения о жесте, такие как расположение, где был выполнен жест и тип жеста. В следующем коде показано, как получить и интерпретировать сообщение жеста.

  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