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.
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.
Argomenti correlati
Applicazione movimenti multitocco (C#), applicazione movimenti multitocco (C++),esempi di tocco di Windows