Löschen mithilfe des Stifts

Wenn Sie das Löschen in Ihrer Anwendung mit Ausnahme des InkOverlay-Objekts implementieren möchten, können Sie dazu eine der beiden folgenden Methoden verwenden.

Verwenden der Stiftspitze

Die Spitze des Tablet-Stifts wird in der Regel für Handschrift und Zeichnung verwendet; der Tipp kann jedoch auch zum Löschen von Freihand verwendet werden. Dazu muss die Anwendung über einen Löschmodus verfügen, den Benutzer verwenden können. Verwenden Sie in diesem Modus Treffertests, um zu bestimmen, welche Freihandeingabe der Cursor bewegt. Sie können den Löschmodus festlegen, um nur die Freihand zu löschen, die der Cursor übergibt, oder ganze Striche, die den Pfad des Cursors kreuzen, abhängig von Entwurfs- oder funktionalen Überlegungen.

Ein Beispiel für die Verwendung eines Löschmodus zum Löschen von Freihand finden Sie im Beispiel zum Löschen von Freihand.

Verwenden des Oberen Stifts

Um das Löschen mit dem oberen Rand des Tablet-Stifts zu implementieren, muss Ihre Anwendung nach einer Änderung im Cursor suchen. Um nach dem invertierten Cursor zu suchen, lauschen Sie auf das CursorInRange-Ereignis , um zu bestimmen, wann sich der Cursor im Kontext Ihrer Anwendung befindet. Wenn sich der Cursor im Bereich befindet, suchen Sie nach der Inverted-Eigenschaft für das Cursor-Objekt . Wenn die Inverted-Eigenschafttrue ist, führen Sie Treffertests durch, um zu bestimmen, welche Freihandeingabe der Cursor bewegt. Löschen Sie entweder die Freihandeingabe oder die Striche, die den Pfad des Cursors überschneiden, abhängig von entwurfs- oder funktionalen Überlegungen.

Ein Beispiel für die Verwendung des oberen Rands des Stifts zum Löschen von Freihand finden Sie im Beispiel zum Löschen von Freihand.

Ermitteln, ob das Löschen mit aktiviertem Stiftoberteil aktiviert ist

Benutzer können den oberen Rand des Stifts verwenden, um Freihand in Anwendungen zu löschen, die für Tablet-PC entwickelt wurden, wenn dies ihre jeweilige Hardware zulässt. Auf diese Funktionalität kann über ein Kontrollkästchen im Gruppenfeld Stiftschaltflächen auf der Registerkarte Stiftoptionen des Dialogfelds Tablet- und Stifteinstellungen zugegriffen werden. Um zu ermitteln, ob der Benutzer das Löschen für den oberen Rand des Stifts aktiviert hat, überprüfen Sie den folgenden Registrierungsunterschlüssel:

HKEY_CURRENT_USER\SOFTWARE\Microsoft\WISP\PEN\SysEventParameters

Der EraseEnable Eintrag dieses Unterschlüssels ist vom Typ REG_DWORD. Der Wert dieses Eintrags ist 1 für aktiviert oder 0 für deaktiviert. Andere Werte sind für die zukünftige Verwendung reserviert.

Wenn Ihre Anwendung zulässt, dass der obere Rand des Stifts zum Löschen verwendet wird, sollten Sie den Wert des Eintrags EraseEnable in folgenden Fällen überprüfen und zwischenspeichern:

  • Ihre Anwendung wird gestartet.
  • Jederzeit erhält Ihre Anwendung den Fokus, nachdem sie den Fokus verloren hat.

Verwenden Sie diesen zwischengespeicherten Wert, um das Verhalten Ihrer Anwendung entsprechend zu ändern.

Im folgenden C#-Beispiel wird eine GetEraseEnabled Methode definiert, die den Wert des EraseEnable Eintrags des SysEventParameters Unterschlüssels überprüft. Die GetEraseEnabled Methode gibt TRUE zurück, wenn der Wert des Eintrags 1 ist. Gibt FALSE zurück, wenn der Wert des Eintrags 0 ist, oder löst eine InvalidOperationException-Ausnahme aus, wenn der Wert des Eintrags nicht 1 oder 0 ist. Die GetEraseEnabled -Methode gibt den erwarteten Wert von TRUE zurück, wenn der Unterschlüssel oder der Eintrag nicht vorhanden ist.

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