Partager via


Effacement à l’aide du stylet

Si vous choisissez d’implémenter l’effacement dans votre application autrement qu’à l’aide de l’objet InkOverlay , vous pouvez le faire à l’aide de l’une des deux méthodes suivantes.

Utilisation de la pointe du stylet

La pointe du stylet de tablette est généralement utilisée pour l’écriture manuscrite et le dessin; toutefois, le conseil peut également être utilisé pour effacer l’entrée manuscrite. Pour ce faire, l’application doit disposer d’un mode d’effacement que les utilisateurs peuvent utiliser. Dans ce mode, utilisez le test d’accès pour déterminer l’entrée manuscrite sur laquelle le curseur se déplace. Vous pouvez définir le mode d’effacement pour supprimer uniquement l’encre que le curseur passe sur ou les traits entiers qui croisent le chemin du curseur, en fonction de la conception ou des considérations fonctionnelles.

Pour obtenir un exemple d’utilisation d’un mode d’effacement pour effacer l’entrée manuscrite, consultez l’exemple d’effacement d’encre.

Utilisation du haut du stylet

Pour implémenter l’effacement avec le haut du stylet de tablette, votre application doit rechercher une modification dans le curseur. Pour rechercher le curseur inversé, écoutez l’événement CursorInRange pour déterminer quand le curseur se trouve dans le contexte de votre application. Lorsque le curseur est dans la plage, recherchez la propriété Inverted sur l’objet Cursor . Si la propriété Inverted a la valeur true, effectuez des tests d’accès pour déterminer l’encre sur laquelle le curseur se déplace. Effacez l’entrée manuscrite ou les traits qui entrecroisent le chemin du curseur, selon des considérations de conception ou fonctionnelles.

Pour obtenir un exemple d’utilisation du haut du stylet pour effacer l’encre, consultez l’exemple d’effacement d’encre.

Déterminer si l’effacement avec le haut du stylet est activé

Les utilisateurs peuvent utiliser le haut du stylet pour effacer l’entrée manuscrite dans les applications conçues pour Tablet PC, si leur matériel particulier le permet. Cette fonctionnalité est accessible par une zone de case activée dans la zone de groupe Boutons du stylet de l’onglet Options du stylet de la boîte de dialogue Paramètres de la tablette et du stylet. Pour détecter si l’utilisateur a activé l’effacement pour le haut du stylet, case activée la sous-clé de Registre suivante :

HKEY_CURRENT_USER\SOFTWARE\Microsoft\WISP\PEN\SysEventParameters

L’entrée EraseEnable de cette sous-clé est de type REG_DWORD. La valeur de cette entrée est 1 pour activé ou 0 pour désactivé. Les autres valeurs sont réservées pour un usage ultérieur.

Si votre application autorise l’utilisation du haut du stylet pour l’effacement, vous devez case activée et mettre en cache la valeur de l’entrée EraseEnable lorsque :

  • Votre application démarre.
  • Chaque fois que votre application reçoit le focus après avoir perdu le focus.

Utilisez cette valeur mise en cache pour modifier le comportement de votre application de manière appropriée.

L’exemple C# suivant définit une GetEraseEnabled méthode qui vérifie la valeur de l’entrée EraseEnable de la SysEventParameters sous-clé. La GetEraseEnabled méthode retourne TRUE si la valeur de l’entrée est 1 ; retourne FALSE si la valeur de l’entrée est 0 ; ou lève une exception InvalidOperationException si la valeur de l’entrée est autre que 1 ou 0. La GetEraseEnabled méthode retourne la valeur attendue de TRUE si la sous-clé ou l’entrée n’est pas présente.

private bool GetEraseEnabled()
{
    // 0 is disabled, 1 is enabled. The default is enabled
    const int Enabled = 1;
    const int Disabled = 0;
    const int DefaultValue = Enabled;

    // Constants for the registry subkey and the entry
    const string Subkey =
                @"SOFTWARE\Microsoft\WISP\PEN\SysEventParameters";
    const string KeyEntry = "EraseEnable";

    // Open the registry subkey.
    Microsoft.Win32.RegistryKey regKey =
        Microsoft.Win32.Registry.CurrentUser.OpenSubKey(Subkey);

    // Retrieve the value of the EraseEnable subkey entry. If either
    // the subkey or the entry does not exist, use the default value.
    object keyValue = (null == regKey) ? DefaultValue :
        regKey.GetValue(KeyEntry,DefaultValue);

    switch((int)keyValue)
    {
        case Enabled:
            // Return true if erasing on pen inversion is enabled. 
            return true;
        case Disabled:
            // Return false if erasing on pen inversion is disabled. 
            return false;
        default:
            // Otherwise, throw an exception. Do not assume this is
            // a Boolean value. Enabled and Disabled are the values
            // defined for this entry at this time. Other values are
            // reserved for future use.
            throw new InvalidOperationException(
                "Unexpected registry subkey value.");
    }
}