Windows-Touchgestenbeispiel (MTGestures)
In diesem Abschnitt wird das Windows-Beispiel für Touchgesten beschrieben.
Das Windows-Beispiel für Touchgesten veranschaulicht, wie Gestenmeldungen verwendet werden, um ein von der Grafikgeräteschnittstelle (GDI) gerendertes Feld zu übersetzen, zu drehen und zu skalieren, indem die WM_GESTURE Nachricht behandelt wird. Der folgende Screenshot zeigt, wie das Beispiel aussieht, wenn es ausgeführt wird.
In diesem Beispiel werden Gestenmeldungen an eine Gesten-Engine übergeben, die dann Methoden zum Zeichnen von Objekten aufruft, um ein Objekt zu übersetzen, zu drehen und zu skalieren, das über Methoden für die Behandlung dieser Befehle verfügt. Um die Funktionsweise des Beispiels zu verdeutlichen, sollten Sie die Schritte zum Aktivieren oder Deaktivieren diagonaler Linien im gerenderten Feld mit dem Befehl mit zwei Fingern in Betracht ziehen. Ein Benutzer führt die Zweifinger-Tippgeste aus, die eine Nachricht generiert, die vom Programm verarbeitet wird. Wenn die Nachricht behandelt wird, wird ein Boolescher Wert zum Rendern von Diagonalen für das Zeichnungsobjekt umfunktioniert, und das Objekt rendert dann die diagonalen Linien.
Der folgende Code zeigt, wie Gestenmeldungen von der WndProc-Methode an die Gesten-Engine übergeben werden.
case WM_GESTURE:
// The gesture-processing code is implemented in the CGestureEngine
// class.
return g_cGestureEngine.WndProc(hWnd,wParam,lParam);
break;
Der folgende Code zeigt, wie die Gesten-Engine den Zweifinger-Tippbefehl verarbeitet.
// Two-finger tap command
void CMyGestureEngine::ProcessTwoFingerTap(void)
{
if(_pcRect)
{
_pcRect->ToggleDrawDiagonals();
}
}
Der folgende Code zeigt, wie das Zeichnungsobjekt seine Diagonalen umschaltet.
void ToggleDrawDiagonals(void){_bDrawDiagonals = !_bDrawDiagonals;}
Der folgende Code zeigt, wie das Objekt diagonale Linien in seiner draw-Methode rendert.
if(_bDrawDiagonals)
{
// draw diagonals
MoveToEx(hdc,ptRect[0].x,ptRect[0].y,NULL);
LineTo(hdc,ptRect[2].x,ptRect[2].y);
MoveToEx(hdc,ptRect[1].x,ptRect[1].y,NULL);
LineTo(hdc,ptRect[3].x,ptRect[3].y);
}
Zugehörige Themen
Multitouch-Gestenanwendung (C#),Multitouch-Gestenanwendung (C++),Windows-Touch-Beispiele