Windows Touch Gestures in C# Sample (MTGesturesCS)

Cette section décrit l’exemple de mouvements tactiles Windows en C#.

Cet exemple de mouvements tactiles Windows montre comment utiliser des messages de mouvement pour traduire, faire pivoter et mettre à l’échelle une zone rendue par l’interface GDI (Graphics Device Interface) en gérant le message WM_GESTURE . La capture d’écran suivante montre à quoi ressemble l’exemple lorsqu’il est en cours d’exécution.

capture d’écran montrant les mouvements tactiles des fenêtres en c sharp échantillon lorsqu’il est en cours d’exécution, avec un rectangle blanc au contour noir centré sur l’écran

Pour cet exemple, les messages de mouvement sont passés à un moteur de mouvement qui appelle ensuite des méthodes sur les objets de dessin pour traduire, faire pivoter et mettre à l’échelle un objet qui a des méthodes pour gérer ces commandes. Pour ce faire en C#, un formulaire spécial, TouchableForm, est créé pour gérer les messages de mouvement. Ce formulaire utilise ensuite les messages pour apporter des modifications à un objet dessin, DrawingObject, afin de modifier le rendu de l’objet dans la méthode Paint.

Pour vous aider à montrer comment fonctionne l’exemple, envisagez les étapes d’utilisation de la commande panoramique pour traduire la zone rendue. Un utilisateur effectue le mouvement panoramique qui génère un message WM_GESTURE avec l’identificateur de mouvement GID_PAN. TouchableForm gère ces messages et met à jour la position de l’objet dessin, puis l’objet s’affiche lui-même traduit.

Le code suivant montre comment le gestionnaire de mouvements récupère les paramètres du message WM_GESTURE , puis effectue la traduction sur la zone rendue via un appel à la méthode move de l’objet dessin.

            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;

Le code suivant montre comment la méthode move de l’objet dessin met à jour les variables de position internes.

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

Le code suivant montre comment la position est utilisée dans la méthode de peinture de l’objet dessin.

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;
            }
(...)
        }

Les mouvements panoramiques entraînent la traduction de la zone dessinée.

Application de mouvements tactiles multiples (C#),Application de mouvements tactiles multiples (C++),Exemples tactiles Windows