Erste Schritte mit Windows-Touchgesten
In diesem Abschnitt werden die grundlegenden Schritte für die Verwendung von Multitouchgesten beschrieben.
Die folgenden Schritte werden in der Regel ausgeführt, wenn Windows-Touchgesten verwendet werden:
- Richten Sie ein Fenster für den Empfang von Gesten ein.
- Verarbeiten sie die Gestenmeldungen.
- Interpretieren sie die Gestenmeldungen.
Einrichten eines Fensters zum Empfangen von Gesten
Standardmäßig erhalten Sie WM_GESTURE Nachrichten.
Hinweis
Wenn Sie RegisterTouchWindow aufrufen, erhalten Sie nicht mehr WM_GESTURE Nachrichten. Wenn Sie keine WM_GESTURE-Nachrichten erhalten, stellen Sie sicher, dass Sie RegisterTouchWindow nicht aufgerufen haben.
Der folgende Code zeigt eine einfache InitInstance-Implementierung.
#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;
}
Behandeln von Gestenmeldungen
Ähnlich wie bei der Behandlung von Windows Touch-Eingabenachrichten können Sie Gestenmeldungen auf viele Arten verarbeiten. Wenn Sie Win32 verwenden, können Sie in WndProc nach der WM_GESTURE Nachricht suchen. Wenn Sie einen anderen Anwendungstyp erstellen, können Sie der Nachrichtenzuordnung die WM_GESTURE Nachricht hinzufügen und dann einen benutzerdefinierten Handler implementieren.
Der folgende Code zeigt, wie Gestenmeldungen behandelt werden können.
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);
Interpretieren der Gestenmeldungen
Die GetGestureInfo-Funktion wird verwendet, um eine Gestennachricht in eine Struktur zu interpretieren, die die Geste beschreibt. Die Struktur GESTUREINFO enthält Informationen zur Geste, z. B. den Ort, an dem die Geste ausgeführt wurde, und den Typ der Geste. Der folgende Code zeigt, wie Sie eine Gestenmeldung abrufen und interpretieren können.
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);
}
}
Zugehörige Themen