システム イベントとマウス メッセージ
Microsoft Windows のマウス メッセージとシステム イベントの両方を送信することで、タブレット ペンの最適な設計と使用方法をアプリケーションに組み込みます。 アプリケーションは、ペンの動きまたはアクションごとに両方のイベント セットを受け取ります。 その後、アプリケーションは、アクションのコンテキストに基づいて、使用する適切なイベントを選択します。 Windows マウス メッセージは、ポイントと選択のアクティビティに適しています。ユーザー インターフェイス (UI) 要素との対話式操作を伴うアクティビティに対して使用する必要があります。 ペン イベントは、リアルタイムのインク アプリケーション、ペン アクション、手書きに適しています。
Note
ペンとマウスのどちらが使用されているかに関係なく、ペン イベントとマウス メッセージの両方がアプリケーションに送信されます。
ペン入力とマウスおよびタッチの区別
アプリケーションは、マウス メッセージ (WM_LBUTTONDOWN など) を受け取ったときに GetMessageExtraInfo 関数を呼び出して、メッセージがペンまたはマウス デバイスのどちらから送信されたかを評価できます。
GetMessageExtraInfo から返される値は、0xFFFFFF00 に対してマスクチェックしてから、0xFF515700 と比較する必要があります。 次の定義により、これを明確にすることができます。
#define MI_WP_SIGNATURE 0xFF515700
#define SIGNATURE_MASK 0xFFFFFF00
#define IsPenEvent(dw) (((dw) & SIGNATURE_MASK) == MI_WP_SIGNATURE
比較が true の場合、このマウス メッセージはタブレット PC ペンまたはタッチ スクリーンによって生成されたものです。 それ以外の場合はすべて、このメッセージはマウス デバイスによって生成されたと見なすことができます。
GetMessageExtraInfo から返される下位 8 ビットは可変です。 それらのビットのうち、7 (0x7F でマスクされた下位 7) は、カーソル ID を表すために使用され、マウスの場合は 0、ペン ID の場合は変数値です。 さらに、Windows Vista では、タッチ入力とペン入力 (0 = ペン、1 = タッチ) を区別するために、0x80 でマスクされた 8 番目のビットが使用されます。
詳細については、「ポインター デバイス入力」と「タッチ入力」を参照してください。
サポートされているシステム ジェスチャ
次の表は、Windows XP Tablet PC Edition に現在含まれているシステム ジェスチャの一覧、対応するペン アクションとシステム イベントの詳細、従来のマウス操作との関係を示しています。
ペン ジェスチャ | マウス操作 | ペン ジェスチャの説明 | イベント メッセージ | マウス メッセージ | Windows ベースのアプリケーションでの動作 |
---|---|---|---|---|---|
タップ |
左クリック |
ペンで画面を 1 回タップします。 |
ペンが持ち上げられると、ISG_TAP が送信されます。 |
ペンが持ち上げられると、WM_LBUTTONDOWN と WM_LBUTTONUP が送信されます。 |
メニューまたはツール バーからコマンドを選択し、コマンドが選択されている場合はアクションを実行します。挿入ポイント (IP) を設定し、選択のフィードバックを表示します。 |
ダブルタップ |
ダブルクリック |
すばやく連続して画面を 2 回タップします。 |
ISG_DOUBLETAP は、2 回目のタップ (下) で送信されます。 ISG_TAP は、最初のタップで送信されるイベントです。 |
WM_LBUTTONDBLCLK は、2 回目のタップ (下) で送信されます。 WM_LBUTTONDOWNとWM_LBUTTONUP は、1 回のタップの場合と同様に、最初のタップ (上) で送信されます。 |
単語を選択し、ファイルまたはフォルダーを開きます。 |
長押し |
右ボタンのクリック |
画面をタップして、マウス アイコンが表示されるまで長押しし、ペンを持ち上げてショートカット メニューを表示します。 アプリケーションは、ペンが持ち上げられたときに右クリック メニューの表示とは異なるアクションを実行することを選択できます。 |
ISG_HOLDENTER は、ペンが十分に長く押下されたときに送信されます。 ISG_RIGHTTAP は、ペンが持ち上げられて右クリックが発生したときに送信されます。 |
WM_RBUTTONDOWN と WM_RBUTTONUP は、右クリックが発生したとき (ペンが持ち上げられたとき) に送信されます。 |
ショートカット メニューを表示します。 |
ホールド |
左クリック |
画面をタップし、マウス アイコンが表示されて消えるまで長押しします。 ユーザーがこれを行うのは、誤って長押ししたときに、タップするだけに戻したい場合です。 |
ペンが持ち上げられると、ISG_TAP が送信されます。 |
ペンを持ち上げると、WM_LBUTTONDOWN と WM_LBUTTONUP が送信されます。 |
長い間左クリックします。 マウスに相当するものは存在しません。 これは、ユーザーが長い間長押しを実行する場合のフォールバックです。 イベントはタップに戻ります。 |
Drag |
左ドラッグ |
画面をタップして移動するオブジェクトを選択し、オブジェクトを選択した後にドラッグします。 |
ドラッグの開始時に ISG_DRAG が送信されます。 |
WM_LBUTTONDOWN はドラッグの開始時に送信され、その後に一連のマウス移動メッセージが続き、その後に WM_LBUTTONUP イベントが送信されます。 |
IP で始めるときに Microsoft Word のようにドラッグして選択。複数の単語を選択。Windows でオブジェクトをドラッグするときと同様にドラッグ。スクロール。 |
長押しに続けてドラッグ |
右ドラッグ |
画面をタップして、移動するオブジェクトを選択します。 マウス アイコンが表示されるまで長押しし、ドラッグしてオブジェクトを移動します。 ペンを持ち上げてショートカット メニューを表示します。 |
ISG_HOLDENTER は、ペンがしばらくの間押下されたときに送信されます。 ISG_RIGHTDRAG は、ドラッグの開始時に送信されます。 |
WM_RBUTTONDOWN はドラッグの開始時に送信され、その後に一連のマウス移動メッセージが続いてから、WM_RBUTTONUP イベントが送信されます。 |
オブジェクトまたは選択範囲をドラッグした後にコンテキスト メニューをドラッグする場合と同様にドラッグします。 |
ペン ホバー |
マウス ホバー |
画面から少し離した位置でペンを保持します。 |
ISG_HOVERENTER イベントが最初に送信されます。 ホバー間隔が完了すると、ISG_HOVERLEAVEis が送信されます。 |
同等のマウス メッセージはありません。 |
ツールヒント、ロールオーバー効果、その他のマウス ホバー動作を表示します。 |
空中シェイク |
タブレット PC 入力パネルを表示します。 マウスに相当するものはありません。 |
ペンを左右にすばやく移動し、上の先端を押しながら画面の範囲内に移動します。 |
イベントはアプリケーションに渡されません。 |
同等のマウス メッセージはありません。 |
新規でタブレット PC に固有。 |
スタイラスとタッチの対話式操作の指定
既定では、ウィンドウはすべてのシステム ジェスチャ イベントを受け取り、既定の対話式操作モデルを使用します。 このモデルの一部分がアプリケーションに干渉する可能性があるため、WndProc の WM_TABLET_QUERYSYSTEMGESTURESTATUS メッセージに応答することで、それらを選択的に無効にすることができます。