Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta seção descreve as etapas básicas para usar gestos multitoque.
As seguintes etapas geralmente são executadas ao usar gestos do Windows Touch:
- Configure uma janela para receber gestos.
- Manipule as mensagens de gestos.
- Interprete as mensagens gestuais.
Configurar uma janela para receber gestos
Por padrão, você recebe WM_GESTURE mensagens.
Observação
Se você ligar para RegisterTouchWindow, deixará de receber mensagens WM_GESTURE. Se não estiver a receber mensagens WM_GESTURE, certifique-se de que não chamou RegisterTouchWindow.
O código a seguir mostra uma implementação InitInstance simples.
#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;
}
Tratamento de mensagens gestuais
Semelhante ao tratamento de mensagens de entrada do Windows Touch, você pode lidar com mensagens de gestos de várias maneiras. Se você estiver usando Win32, você pode verificar a mensagem WM_GESTURE no WndProc. Se você estiver criando outro tipo de aplicativo, poderá adicionar a mensagem WM_GESTURE ao mapa de mensagens e, em seguida, implementar um manipulador personalizado.
O código a seguir mostra como as mensagens de gestos podem ser tratadas.
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);
Interpretando as mensagens de gestos
A função GetGestureInfo é usada para interpretar uma mensagem de gesto em uma estrutura que descreve o gesto. A estrutura, GESTUREINFO, tem informações sobre o gesto, como o local onde o gesto foi realizado e o tipo de gesto. O código a seguir mostra como você pode recuperar e interpretar uma mensagem 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);
}
}
Tópicos relacionados