Windows mouvements tactiles dans l’exemple C# (MTGesturesCS)

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

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

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

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 rendre cela possible 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 sur un objet de dessin, DrawingObject, pour 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 de dessin, et l’objet s’affiche alors 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 de déplacement de l’objet de 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 de déplacement de l’objet de dessin met à jour les variables de position interne.

        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 de 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 le rendu de la zone dessinée.

Application Mouvements multi-tactiles (C#), Application Mouvements multi-tactiles (C++),Windows Exemples tactiles