Share via


Cancellazione tramite la penna

Se si sceglie di implementare la cancellazione nell'applicazione diversa dall'uso dell'oggetto InkOverlay , è possibile farlo usando uno dei due metodi seguenti.

Uso della punta della penna

La punta della penna del tablet viene generalmente utilizzata per la grafia e il disegno; Tuttavia, il suggerimento può essere usato anche per cancellare l'input penna. A tale scopo, l'applicazione deve avere una modalità di cancellazione che gli utenti possono usare. In questa modalità, usare hit testing per determinare l'input penna su cui si sposta il cursore. È possibile impostare la modalità di cancellazione per eliminare solo l'input penna che il cursore passa sopra o interi tratti che intersecano il percorso del cursore, a seconda della progettazione o delle considerazioni funzionali.

Per un esempio di come usare una modalità di cancellazione per cancellare l'input penna, vedere esempio di cancellazione dell'input penna.

Uso della parte superiore della penna

Per implementare la cancellazione con la parte superiore della penna del tablet, l'applicazione deve cercare una modifica nel cursore. Per cercare il cursore invertito, attendere l'evento CursorInRange per determinare quando il cursore si trova nel contesto dell'applicazione. Quando il cursore è compreso nell'intervallo, cercare la proprietà Inverted nell'oggetto Cursor . Se la proprietà Inverted è true, eseguire hit testing per determinare l'input penna su cui si sposta il cursore. Cancellare l'input penna o i tratti che intersecano il percorso del cursore, a seconda della progettazione o delle considerazioni funzionali.

Per un esempio di come usare la parte superiore della penna per cancellare l'input penna, vedere Esempio di cancellazione dell'input penna.

Determinare se cancellare con la parte superiore della penna è abilitata

Gli utenti possono usare la parte superiore della penna per cancellare l'input penna nelle applicazioni progettate per Tablet PC, se il loro hardware specifico lo consente. Questa funzionalità è accessibile da una casella di controllo nella casella di gruppo Pulsanti penna della scheda Opzioni penna della finestra di dialogo Impostazioni tablet e penna. Per rilevare se l'utente ha abilitato la cancellazione per la parte superiore della penna, controllare la seguente sottochiave del Registro di sistema:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\WISP\PEN\SysEventParameters

La EraseEnable voce di questa sottochiave è di tipo REG_DWORD. Il valore di questa voce è 1 per abilitato o 0 per disabilitato. Altri valori sono riservati per utilizzi futuri.

Se l'applicazione consente di usare la parte superiore della penna per cancellare, è necessario controllare e memorizzare nella cache il valore della voce EraseEnable quando:

  • L'applicazione viene avviata.
  • Ogni volta che l'applicazione riceve lo stato attivo dopo aver perso lo stato attivo.

Usare questo valore memorizzato nella cache per modificare il comportamento dell'applicazione in modo appropriato.

L'esempio C# seguente definisce un GetEraseEnabled metodo che controlla il valore della EraseEnable voce della SysEventParameters sottochiave. Il GetEraseEnabled metodo restituisce TRUE se il valore della voce è 1; restituisce FALSE se il valore della voce è 0 oppure genera un'eccezione InvalidOperationException se il valore della voce è diverso da 1 o 0. Il GetEraseEnabled metodo restituisce il valore previsto true se la sottochiave o la voce non è presente.

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