ペンを使用した消去
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 の場合、メソッドは GetEraseEnabled
TRUE を 返します。エントリの値が 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.");
}
}