Condividi tramite


Windows Touch Gestures in C# Sample (MTGesturesCS)

In questa sezione viene descritto l'esempio movimenti tocco di Windows in C#.

Questo esempio di Movimenti tocco di Windows illustra come usare i messaggi di movimento per tradurre, ruotare e ridimensionare una casella di cui viene eseguito il rendering da GDI (Graphics Device Interface) gestendo il messaggio WM_GESTURE . La schermata seguente mostra l'aspetto dell'esempio durante l'esecuzione.

screenshot che mostra i movimenti di tocco di Windows in c sharp sample quando è in esecuzione, con un rettangolo bianco con contorno nero centrato sullo schermo

Per questo esempio, i messaggi di movimento vengono passati a un motore movimenti che chiama quindi i metodi per disegnare oggetti per tradurre, ruotare e ridimensionare un oggetto che dispone di metodi per la gestione di questi comandi. Per renderlo possibile in C#, viene creato un modulo speciale TouchableForm per gestire i messaggi di movimento. In questo modulo vengono quindi utilizzati i messaggi per apportare modifiche a un oggetto disegno, DrawingObject, per modificare il rendering dell'oggetto nel metodo Paint.

Per illustrare il funzionamento dell'esempio, prendere in considerazione i passaggi per l'uso del comando panoramica per tradurre la casella di cui è stato eseguito il rendering. Un utente esegue il movimento di panoramica che genera un messaggio di WM_GESTURE con l'identificatore del movimento GID_PAN. TouchableForm gestisce questi messaggi e aggiorna la posizione dell'oggetto disegno e l'oggetto verrà quindi convertito.

Nel codice seguente viene illustrato come il gestore movimenti recupera i parametri dal messaggio WM_GESTURE e quindi esegue la conversione nella casella sottoposta a rendering tramite una chiamata al metodo di spostamento dell'oggetto disegno.

            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;

Il codice seguente mostra come il metodo di spostamento dell'oggetto disegno aggiorna le variabili di posizione interne.

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

Nel codice seguente viene illustrato come viene utilizzata la posizione nel metodo di disegno dell'oggetto di disegno.

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

I movimenti di panoramica causeranno il rendering della casella disegnata.

Applicazione movimenti multitocco (C#), applicazione movimenti multitocco (C++),esempi di tocco di Windows