Bagikan melalui


Mulai Menggunakan Windows Touch Gestures

Bagian ini menjelaskan langkah-langkah dasar untuk menggunakan gerakan multitouch.

Langkah-langkah berikut biasanya dilakukan saat menggunakan gerakan Windows Touch:

  1. Siapkan jendela untuk menerima gerakan.
  2. Menangani pesan gerakan.
  3. Menginterpretasikan pesan gerakan.

Menyiapkan Jendela untuk Menerima Gerakan

Secara default, Anda menerima pesan WM_GESTURE .

Catatan

Jika Anda memanggil RegisterTouchWindow, Anda akan berhenti menerima pesan WM_GESTURE . Jika Anda tidak menerima pesan WM_GESTURE , pastikan Anda belum memanggil RegisterTouchWindow.

 

Kode berikut menunjukkan implementasi InitInstance sederhana.

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

Menangani Pesan Gerakan

Mirip dengan menangani pesan input Windows Touch, Anda dapat menangani pesan gerakan dalam banyak cara. Jika Anda menggunakan Win32, Anda dapat memeriksa pesan WM_GESTURE di WndProc. Jika Anda membuat jenis aplikasi lain, Anda dapat menambahkan pesan WM_GESTURE ke peta pesan lalu menerapkan handler kustom.

Kode berikut menunjukkan bagaimana pesan gerakan dapat ditangani.

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

Menginterpretasikan Pesan Gerakan

Fungsi GetGestureInfo digunakan untuk menginterpretasikan pesan gerakan ke dalam struktur yang menjelaskan gerakan. Strukturnya, GESTUREINFO, memiliki informasi tentang gerakan seperti lokasi di mana gerakan dilakukan dan jenis gerakan. Kode berikut menunjukkan bagaimana Anda dapat mengambil dan menginterpretasikan pesan gerakan.

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

Gerakan Sentuh Windows