Windows Beispiel für Touchgesten in C# (MTGesturesCS)

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

In Windows Beispiel für Touchgesten wird veranschaulicht, wie Gestennachrichten verwendet werden, um ein vom Graphics Device Interface (GDI) gerenderte Feld zu übersetzen, zu drehen und zu skalieren, indem die WM_GESTURE wird. Der folgende Screenshot zeigt, wie das Beispiel aussieht, wenn es ausgeführt wird.

Screenshot, der die Touchbewegungen von Fenstern in c sharp-Beispiel zeigt, wenn es ausgeführt wird, mit einem schwarzen, weißen Rechteck, das auf dem Bildschirm zentriert ist

Für dieses 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 zum Behandeln dieser Befehle verfügt. Um dies in C# zu ermöglichen, wird eine spezielle Form, TouchableForm, erstellt, um Gestenmeldungen zu verarbeiten. Dieses Formular verwendet dann die Meldungen, um Änderungen an einem Zeichnungsobjekt (DrawingObject) vorzunehmen, um zu ändern, wie das Objekt in der Paint wird.

Um die Funktionsweise des Beispiels zu beispielen, sollten Sie die Schritte für die Verwendung des Schwenkbefehls zum Übersetzen des gerenderten Felds in Betracht ziehen. Ein Benutzer führt die Schwenkbewegung aus, die eine WM_GESTURE mit dem Gestenbezeichner GID_PAN. TouchableForm verarbeitet diese Meldungen und aktualisiert die Position des Zeichnungsobjekts, und das Objekt rendert sich selbst übersetzt.

Der folgende Code zeigt, wie der Gestenhandler Parameter aus der WM_GESTURE-Nachricht abruft und dann die Übersetzung des gerenderten Felds über 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 bewirken, dass das gezeichnete Feld übersetzt wird.

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