Partager via


Exemple de test d’accès à l’entrée manuscrite

Cet exemple illustre deux méthodes pour rechercher des entrées manuscrites, en fonction d’un emplacement d’écran.

Les fonctionnalités suivantes sont utilisées dans cet exemple :

  • Utilisation d’un collecteur d’encre
  • Exécution d’un test de positionnement
  • Localisation du point le plus proche

Accès à l’API Ink

Tout d’abord, référencez les classes Tablet PC, situées dans le Kit de développement logiciel (SDK) Windows Vista ou Windows XP Édition Tablet PC.

using Microsoft.Ink;

Gestion des événements de chargement de formulaire et de peinture

Gestionnaire d’événements Load du formulaire :

// Create the InkCollector, and turn it on
ic = new InkCollector(Handle);  // attach it to the form's frame window

// default to ink-enabled mode
mode = ApplicationMode.Ink;
ic.CollectionMode = CollectionMode.InkOnly;

// turn the collector on
ic.Enabled = true;ic.AutoRedraw = true;

Le gestionnaire d’événements Paint du formulaire vérifie le mode d’application :

  • En mode HitTest, il peint un cercle autour du curseur. Le stylet actif est défini dans la méthode handleHitTest de l’application.
  • En mode NearestPoint, il peint une ligne rouge entre le curseur et le point le plus proche du curseur. Le point le plus proche est calculé dans la méthode handleNearestPoint de l’application.
if( mode == ApplicationMode.HitTest)
{
    e.Graphics.DrawEllipse(activepen, penPt.X - HitSize/2, penPt.Y - HitSize/2, HitSize, HitSize);
}
else if( mode == ApplicationMode.NearestPoint )
{
    e.Graphics.DrawLine(redPen, penPt, nearestPt);
}

Cet exemple a un algorithme de repaint très simple. Avec sa propriété AutoRedraw définie sur TRUE, le collecteur d’encre se repeint lui-même lorsque le formulaire est redessiné. Pour simplifier le redessinage du formulaire, l’application effectue le suivi d’un cadre englobant, la variable membre invalidateRect, pour la zone où la peinture est ajoutée, qui est invalidée chaque fois que le formulaire est redessiné.

Gestion des événements de menu

La commande Exit désactive InkCollector avant de quitter l’application.

La commande Ink met à jour le mode d’application et le menu status, active le collecteur d’encre et invalide la zone précédemment peinte du formulaire.

Les commandes Test de positionnement et Point le plus proche modifient le curseur, mettent à jour le mode d’application et le menu status, désactivent le collecteur d’encre et invalident la zone précédemment peinte du formulaire.

Le clair! La commande désactive InkCollector lors du remplacement de la propriété InkCollector de l’objet InkCollector par un nouvel objet Ink , génère un événement de commande Ink et force une actualisation sur le contrôle.

Gestion des événements de souris

Le gestionnaire d’événements MouseMove vérifie le mode d’application :

  • En mode Entrée manuscrite, il ne fait rien, ce qui permet à l’entrée manuscrite d’être collectée normalement par le collecteur d’encre.
  • En mode HitTest, il envoie les arguments d’événement à la méthode handleHitTest de l’application.
  • En mode NearestPoint, il envoie les arguments d’événement à la méthode handleNearestPoint de l’application.

Exécution d’un test de positionnement

La méthode handleHitTest de l’application crée deux points, l’emplacement du curseur et un point HitSize pixels distants du curseur, puis convertit ces deux points de pixels en coordonnées d’espace d’entrée manuscrite.

penPt = new Point(e.X, e.Y);
Point pt2 = new Point(e.X, e.Y);
Point pt3 = new Point(e.X + HitSize/2, e.Y);

using (Graphics g = CreateGraphics())
{
    ic.Renderer.PixelToInkSpace(g, ref pt1);
    ic.Renderer.PixelToInkSpace(g, ref pt2);
}

Ensuite, l’objet InkCollector utilise la méthode Microsoft.Ink.Ink.HitTest() pour rechercher les traits qui se trouvent dans pt3. X - pt2. X unités d’espace d’entrée manuscrite du curseur, pt2.

Strokes strokes = ic.Ink.HitTest(pt2, (float)(pt3.X - pt2.X));

La méthode handleHitTest définit ensuite la couleur du stylet selon que des traits ont été trouvés, invalide la région invalidateRect, calcule une nouvelle région dans laquelle le cercle de test de positionnement est dessiné, puis invalide la nouvelle région.

Localisation du point le plus proche

La méthode handleNearestPoint de l’application crée deux points égaux à l’emplacement du curseur. L’un de ces points, pt, est converti en espace d’entrée manuscrite et utilisé dans l’appel à la méthode NearestPoint de l’objet InkCollector. La méthode NearestPoint renvoie l’objet Stroke le plus proche du point et définit le paramètre de sortie de l’index à virgule flottante.

using (Graphics g = CreateGraphics())
{

   // Remember pen location
    Point inkPenPt = new Point(e.X, e.Y);

    // Convert the pen location into a location in ink space
    ic.Renderer.PixelToInkSpace(g, ref inkPenPt);

    // ...

    float fIndex;
    Stroke stroke = ic.Ink.NearestPoint(inkPenPt, out fIndex);

Si aucun trait n’est présent, la méthode NearestPoint retourne NULL et l’emplacement du curseur est utilisé comme point le plus proche. Sinon, l’emplacement sur le trait qui correspond à l’index à virgule flottante est calculé.

Les coordonnées de point les plus proches sont ensuite converties en pixels à partir de l’espace d’entrée manuscrite, la méthode handleNearestPoint invalide ensuite la région invalidateRect, calcule une nouvelle région dans laquelle la ligne vers le point le plus proche est dessinée et invalide également la nouvelle région.

Fermeture du formulaire

La méthode Dispose du formulaire supprime l’objet InkCollector .