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

cette section décrit l’exemple de gestes tactiles Windows en C#.

cet exemple Windows les gestes tactiles montre comment utiliser des messages de mouvement pour translater, faire pivoter et mettre à l’échelle une zone rendue par le Graphics Device Interface (GDI) en gérant le message d' WM_GESTURE . La capture d’écran suivante montre comment l’exemple apparaît lorsqu’il est en cours d’exécution.

capture d’écran montrant les gestes tactiles Windows dans l’échantillon net Sharp lorsqu’il est en cours d’exécution, avec un rectangle blanc avec contour noir centré à l’écran

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

Pour vous aider à voir comment fonctionne l’exemple, examinez les étapes d’utilisation de la commande PAN pour traduire la zone rendue. Un utilisateur effectue le mouvement de panoramique qui génère un message de WM_GESTURE avec l’identificateur de mouvement GID_PAN. Le TouchableForm gère ces messages et met à jour la position de l’objet de dessin, et l’objet est ensuite rendu 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 Drawing.

            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 de 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 Paint de l’objet Drawing.

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 gestes panoramiques entraînent le rendu de la zone dessinée.

application de mouvements tactiles multiples (C#), application de gestes multipoint (C++), exemples de touches tactiles Windows