Introduzione con i movimenti tocco di Windows
Questa sezione descrive i passaggi di base per l'uso di movimenti multitouch.
I passaggi seguenti vengono in genere eseguiti quando si usano i movimenti touch di Windows:
- Configurare una finestra per la ricezione di movimenti.
- Gestire i messaggi di movimento.
- Interpretare i messaggi di movimento.
Configurazione di una finestra per ricevere i movimenti
Per impostazione predefinita, viene visualizzato WM_GESTURE messaggi.
Nota
Se si chiama RegisterTouchWindow, si interromperà la ricezione di messaggi WM_GESTURE . Se non si ricevono messaggi WM_GESTURE , assicurarsi di non aver chiamato RegisterTouchWindow.
Il codice seguente mostra una semplice implementazione di 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;
}
Gestione dei messaggi di movimento
Analogamente alla gestione dei messaggi di input tocco di Windows, è possibile gestire i messaggi di movimento in molti modi. Se si usa Win32, è possibile verificare la presenza del messaggio di WM_GESTURE in WndProc. Se si sta creando un altro tipo di applicazione, è possibile aggiungere il messaggio di WM_GESTURE alla mappa dei messaggi e quindi implementare un gestore personalizzato.
Il codice seguente illustra come gestire i messaggi di movimento.
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);
Interpretazione dei messaggi di movimento
La funzione GetGestureInfo viene usata per interpretare un messaggio di movimento in una struttura che descrive il movimento. La struttura , GESTUREINFO, contiene informazioni sul movimento, ad esempio la posizione in cui è stato eseguito il gesto e il tipo di movimento. Il codice seguente illustra come recuperare e interpretare un messaggio di movimento.
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);
}
}
Argomenti correlati