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.
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.
Rubriques connexes
Application de mouvements tactiles multiples (C#),Application de mouvements tactiles multiples (C++),Exemples tactiles Windows
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour