Introducción con gestos táctiles de Windows
En esta sección se describen los pasos básicos para usar gestos multitouch.
Normalmente, los pasos siguientes se realizan al usar gestos de Windows Touch:
- Configure una ventana para recibir gestos.
- Controle los mensajes de gestos.
- Interpretar los mensajes de gestos.
Configurar una ventana para recibir gestos
De forma predeterminada, recibirá WM_GESTURE mensajes.
Nota
Si llamas a RegisterTouchWindow, dejarás de recibir WM_GESTURE mensajes. Si no recibe WM_GESTURE mensajes, asegúrese de que no ha llamado a RegisterTouchWindow.
En el código siguiente se muestra una implementación sencilla de 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;
}
Control de mensajes de gestos
De forma similar al control de los mensajes de entrada de Windows Touch, puedes controlar los mensajes de gestos de muchas maneras. Si usa Win32, puede buscar el mensaje de WM_GESTURE en WndProc. Si va a crear otro tipo de aplicación, puede agregar el mensaje WM_GESTURE al mapa de mensajes e implementar un controlador personalizado.
En el código siguiente se muestra cómo se pueden controlar los mensajes de gestos.
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);
Interpretación de los mensajes de gestos
La función GetGestureInfo se usa para interpretar un mensaje de gesto en una estructura que describe el gesto. La estructura , GESTUREINFO, tiene información sobre el gesto, como la ubicación donde se realizó el gesto y el tipo de gesto. En el código siguiente se muestra cómo recuperar e interpretar un mensaje de gesto.
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);
}
}
Temas relacionados