Condividi tramite


Cancellazione tramite la penna

Se si sceglie di implementare la cancellazione nell'applicazione diversa da usando l'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 scrittura a mano e il disegno; tuttavia, la punta può essere usata anche per cancellare l'inchiostro. A tale scopo, l'applicazione deve avere una modalità di cancellazione che gli utenti possono usare. In questa modalità, usare il rilevamento di colpi per determinare su quale inchiostro si sposta il cursore. È possibile impostare la modalità di cancellazione per eliminare solo l'inchiostro su cui il cursore passa sopra o interi tratti che intersecano il percorso del cursore, a seconda delle considerazioni progettuali o funzionali.

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

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 è nell'intervallo, cercare la proprietà Invertita nell'oggetto Cursor. Se la proprietà invertita è true, esegui il rilevamento delle collisioni per determinare su quale inchiostro il cursore sta passando. Cancellare l'inchiostro o i tratti che intersecano il percorso del cursore, a seconda delle considerazioni di progettazione o funzionali.

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

Determinare se la cancellazione con la parte superiore della penna è abilitata

Gli utenti possono usare la parte superiore della penna per cancellare l'inchiostro nelle applicazioni progettate per Tablet PC, se il loro hardware specifico lo consente. Questa funzionalità è accessibile mediante una casella di controllo nel gruppo di pulsanti della penna presente nella scheda Opzioni penna della finestra di dialogo Impostazioni del tablet e della 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 voce EraseEnable di questa sottochiave è di tipo REG_DWORD. Il valore di questa voce è 1 per abilitato o 0 per disabilitato. Altri valori sono riservati per un uso futuro.

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 ritorna in primo piano dopo aver perso il focus.

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

L'esempio C# seguente definisce un metodo GetEraseEnabled che controlla il valore della voce EraseEnable della sottochiave SysEventParameters. Il metodo GetEraseEnabled restituisce true se il valore della voce è 1; restituisce false se il valore della voce è 0; o genera un'eccezione InvalidOperationException se il valore della voce è diverso da 1 o 0. Il metodo GetEraseEnabled restituisce il valore previsto di 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.");
    }
}