Windows-Touchgesten in C#-Beispiel (MTGesturesCS)

In diesem Abschnitt wird das Windows Touch Gestures-Beispiel in C# beschrieben.

In diesem Windows-Beispiel für Touchgesten wird veranschaulicht, wie Gestenmeldungen verwendet werden, um ein von der Grafikgeräteschnittstelle gerendertes Feld zu übersetzen, zu drehen und zu skalieren, indem die WM_GESTURE Nachricht verarbeitet wird. Der folgende Screenshot zeigt, wie das Beispiel aussieht, wenn es ausgeführt wird.

Screenshot, der die Touchgesten von Fenstern in einem scharfen Beispiel zeigt, wenn es ausgeführt wird, mit einem schwarz umrissenen weißen Rechteck, das auf dem Bildschirm zentriert ist

In diesem Beispiel werden Gestenmeldungen an eine Gesten-Engine übergeben, die dann Methoden für Zeichnungsobjekte aufruft, um ein Objekt zu übersetzen, zu drehen und zu skalieren, das über Methoden für die Verarbeitung dieser Befehle verfügt. Um dies in C# zu ermöglichen, wird ein spezielles Formular, TouchableForm, erstellt, um Gestenmeldungen zu verarbeiten. Dieses Formular verwendet dann die Nachrichten, um Änderungen an einem Zeichnungsobjekt, DrawingObject, vorzunehmen, um zu ändern, wie das Objekt in der Paint-Methode gerendert wird.

Um zu zeigen, wie das Beispiel funktioniert, sollten Sie die Schritte zum Übersetzen des gerenderten Felds mit dem Befehl schwenken in Betracht ziehen. Ein Benutzer führt die Schwenkgeste aus, die eine WM_GESTURE Nachricht mit dem Gestenbezeichner GID_PAN generiert. TouchableForm verarbeitet diese Meldungen und aktualisiert die Position des Zeichnungsobjekts, und das Objekt rendert sich dann selbst übersetzt.

Der folgende Code zeigt, wie der Gestenhandler Parameter aus der WM_GESTURE Nachricht abruft und dann die Übersetzung für das gerenderte Feld durch einen Aufruf der Move-Methode des Zeichnungsobjekts ausführt.

            switch (gi.dwID)
            {
                case GID_BEGIN:
                case GID_END:
                    break;
               (...)
                case GID_PAN:
                    switch (gi.dwFlags)
                    {
                        case GF_BEGIN:
                            _ptFirst.X = gi.ptsLocation.x;
                            _ptFirst.Y = gi.ptsLocation.y;
                            _ptFirst = PointToClient(_ptFirst);
                            break;

                        default:
                            // We read the second point of this gesture. It is a
                            // middle point between fingers in this new position
                            _ptSecond.X = gi.ptsLocation.x;
                            _ptSecond.Y = gi.ptsLocation.y;
                            _ptSecond = PointToClient(_ptSecond);

                            // We apply move operation of the object
                            _dwo.Move(_ptSecond.X - _ptFirst.X, _ptSecond.Y - _ptFirst.Y);

                            Invalidate();

                            // We have to copy second point into first one to
                            // prepare for the next step of this gesture.
                            _ptFirst = _ptSecond;
                            break;
                    }
                    break;

Der folgende Code zeigt, wie die Move-Methode des Zeichnungsobjekts interne Positionsvariablen aktualisiert.

        public void Move(int deltaX,int deltaY)
        {
            _ptCenter.X += deltaX;
            _ptCenter.Y += deltaY;
        }

Der folgende Code zeigt, wie die Position in der Paint-Methode des Zeichnungsobjekts verwendet wird.

public void Paint(Graphics graphics)
        {
(...)
            for (int j = 0; j < 5; j++)
            {
                int idx = arrPts[j].X;
                int idy = arrPts[j].Y;

                // rotation
                arrPts[j].X = (int)(idx * dCos + idy * dSin);
                arrPts[j].Y = (int)(idy * dCos - idx * dSin);

                // translation
                arrPts[j].X += _ptCenter.X;
                arrPts[j].Y += _ptCenter.Y;
            }
(...)
        }

Schwenkgesten führen dazu, dass das gezeichnete Feld übersetzt gerendert wird.

Multitouch-Gestenanwendung (C#),Multitouch-Gestenanwendung (C++),Windows Touch-Beispiele