Windows Touchgesten im C#-Beispiel (MTGesturesCS)

In diesem Abschnitt wird das Beispiel für Windows Touchgesten in C# beschrieben.

In diesem Windows Beispiel für Touchgesten wird veranschaulicht, wie Gestennachrichten zum Übersetzen, Drehen und Skalieren eines Felds verwendet werden, das von der Grafikgeräteschnittstelle (GDI) gerendert wird, indem die WM_GESTURE Nachricht behandelt wird. Der folgende Screenshot zeigt, wie das Beispiel aussieht, wenn es ausgeführt wird.

screen shot showing the windows touch gestures in c sharp sample when it is running, with a black-outlined white rectangle centered on the screen

Für dieses Beispiel werden Gestiknachrichten an ein Gestenmodul übergeben, das dann Methoden zum Zeichnen von Objekten aufruft, um objekte zu übersetzen, zu drehen und zu skalieren, das Methoden zum Behandeln dieser Befehle enthält. Um dies in C# zu ermöglichen, wird ein spezielles Formular, TouchableForm, erstellt, um Gestennachrichten zu behandeln. 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 zur Verwendung des Befehls "Schwenken" zum Übersetzen des gerenderten Felds berücksichtigen. Ein Benutzer führt die Schwenkbewegung aus, die eine WM_GESTURE Nachricht mit dem Gestikbezeichner GID_PAN generiert. Das TouchableForm behandelt diese Nachrichten und aktualisiert die Position des Zeichnungsobjekts, und das Objekt wird dann selbst übersetzt.

Der folgende Code zeigt, wie der Gestenhandler Parameter aus der WM_GESTURE-Nachricht abruft und dann übersetzungen im gerenderten 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;
            }
(...)
        }

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

Multi-Touch-Gestenanwendung (C#),Multi-Touch-Gestenanwendung (C++), Windows Touchbeispiele