次の方法で共有


ペンを使用した消去

InkOverlay オブジェクトを使用する以外に、アプリケーションで消去を実装する場合は、次の 2 つの方法のいずれかを使用して行うことができます。

ペン先の使用

タブレットペンの先端は、一般的に手書きや描画に使用されます。ただし、先端を使用してインクを消去することもできます。 これを行うには、ユーザーが使用できる消去モードがアプリケーションに必要です。 このモードでは、ヒット テストを使用して、カーソルが移動しているインクを特定します。 デザインや機能に関する考慮事項に応じて、カーソルが渡すインクのみ、またはカーソルのパスと交差するストローク全体を削除するように消去モードを設定できます。

消去モードを使用してインクを消去する方法の例については、「インク消去 のサンプル」を参照してください。

ペンの上部を使用する

タブレット ペンの上部で消去を実装するには、アプリケーションでカーソルの変更を探す必要があります。 反転カーソルを探すには、 CursorInRange イベントをリッスンして、カーソルがアプリケーションのコンテキスト内にあるかどうかを判断します。 カーソルが範囲内にある場合は、Cursor オブジェクトの Inverted プロパティを探します。 Inverted プロパティが true の場合は、ヒット テストを実行して、カーソルが移動しているインクを特定します。 デザインや機能に関する考慮事項に応じて、インクまたはカーソルのパスと交差するストロークを消去します。

ペンの上部を使用してインクを消去する方法の例については、「 インク消去のサンプル」を参照してください。

ペンの上部で消去が有効になっているかどうかを判断する

特定のハードウェアで使用できる場合、ユーザーはペンの上部を使用して、タブレット PC 用に設計されたアプリケーションでインクを消去できます。 この機能には、[タブレットとペンの設定] コントロール パネル ダイアログの [ペン のオプション] タブにある [ペン ボタン] グループ ボックスのチェック ボックスからアクセスできます。 ユーザーがペンの上部で消去を有効にしているかどうかを検出するには、次のレジストリ サブキーをチェックします。

HKEY_CURRENT_USER\SOFTWARE\Microsoft\WISP\PEN\SysEventParameters

EraseEnableこのサブキーのエントリは、REG_DWORD型です。 このエントリの値は、enabled の場合は 1、無効の場合は 0 です。 他の値は将来使用するために予約されています。

アプリケーションでペンの上部を消去に使用できる場合は、次の場合に EraseEnable エントリの値をチェックしてキャッシュする必要があります。

  • アプリケーションが起動します。
  • フォーカスを失った後にアプリケーションがフォーカスを受け取るたびに。

このキャッシュされた値を使用して、アプリケーションの動作を適切に変更します。

次の C# の例では、 GetEraseEnabled サブキーのエントリの値をチェックする EraseEnable メソッドを SysEventParameters 定義します。 エントリの値が 1 の場合、メソッドは GetEraseEnabledTRUE を 返します。エントリの値が 0 の場合は FALSE を 返し、エントリの値が 1 または 0 以外の場合は InvalidOperationException 例外をスローします。 サブキーまたはエントリが存在しない場合、メソッドは GetEraseEnabled TRUE の期待値を返します。

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