アーキテクチャの概要
このアーキテクチャの概要では、Windows Touch API for Tablet and Touch Technologies のコンテキストについて説明し、より大きな Windows 7 アーキテクチャにどのように適合するかを説明します。
Windows タッチ入力とジェスチャのメッセージ
Windows Touch のメッセージング機能は、実行中にメッセージをリッスンして解釈することで有効になります。 次の図は、メッセージがハードウェアから生成され、Windows 7 によってアプリケーションに送信される方法を示しています。
図の左端の列では、タッチ依存ハードウェアはユーザーからの入力を受け取ります。 その後、ドライバーはハードウェアと OS の間で通信します。 次に、OS によって WM_TOUCH メッセージまたは WM_GESTURE メッセージが生成され、アプリケーションの HWND に送信されます。 その後、アプリケーションは、メッセージにカプセル化された情報を指定して UI を更新します。
アプリケーションは既定でジェスチャを受け取ります。 アプリケーションが RegisterTouchWindow 関数を使用して Windows Touch 入力メッセージに登録しない限り、ジェスチャ (WM_GESTURE メッセージ) の通知は Windows によって作成され、そのアプリケーション ウィンドウに送信されます。 アプリケーション ウィンドウがタッチ メッセージを受信するように登録すると、Windows Touch 入力 (WM_TOUCH メッセージ) の通知がそのアプリケーション ウィンドウに送信されます。 Windows Touch メッセージとジェスチャ メッセージは、タッチが行われた後、またはアプリケーション ウィンドウでジェスチャが開始された後、ジェスチャが完了するか、プライマリ タッチが完了するまで、すべてのメッセージがそのアプリケーションに送信されるという意味で、貪欲です。
レガシ サポートの場合、Windows では 、メッセージが バブルアップされた場合にWM_GESTUREメッセージを解釈し、ジェスチャにマップされる適切なメッセージを送信または POST します。 レガシ サポートの中断を回避するには、 DefWindowProc を使用してメッセージWM_GESTURE転送してください。 レガシ サポートの詳細については、「 Windows Touch ジェスチャの概要」セクションを参照してください。
操作と慣性
Windows Touch プログラマは、発生するジェスチャに意味のある方法で、複数のソースからのジェスチャを解釈できる必要があります。 Microsoft では、これらの計算を実行するための操作 API を提供しています。 操作は、基本的にジェスチャ全体を記述する値に関連付けられたジェスチャです。 入力データを操作プロセッサに接続した後、ユーザーがオブジェクトに対して行うアクションに関連する情報を取得できます。 次の図は、操作を使用する 1 つの方法を示しています。
図の左上で、ユーザーは画面にタッチし、タッチ メッセージを作成します。 これらのメッセージには、フォーカスのあるオブジェクトを決定するために使用される x 座標と y 座標が含まれています。 フォーカス内の オブジェクトには、操作プロセッサが含まれています。 次に、 TOUCHEVENTF_UP フラグを持つ WM_TOUCH メッセージで、ユーザーのフォーカス内のオブジェクトが選択され、操作プロセッサが参照され、メッセージが操作プロセッサに送信されます。 この連絡先に関連付けられている後続のWM_TOUCH メッセージは、TOUCHEVENTF_UP フラグを持つWM_TOUCH メッセージが受信され、選択したオブジェクトが逆参照されるまで、操作プロセッサに送信されます。 図の右下セクションでは、タッチ メッセージの作成中に発生する操作イベントを処理するために、 _IManipulationEvents インターフェイスを実装する操作イベント シンクが使用されます。 イベント シンクは、操作イベントが発生している間に、操作イベントに基づいてインターフェイスの更新を実行できます。
Windows Touch アプリケーションでは、オブジェクトがタッチされなくなったときに突然停止するのではなく、スムーズに停止するように単純な物理演算を組み込むのが一般的です。 Microsoft は、アプリケーションが他のアプリケーションと同様の方法で動作できるように、これらの単純な物理演算の計算を実行する慣性 API を提供しています。 これにより、堅牢な物理機能を作成するために必要な労力も節約できます。 次の図は、慣性を使用する方法を示しています。
慣性と操作の類似点に注意してください。 2 つの唯一の違いは、慣性の場合、解釈されたメッセージが操作プロセッサではなく慣性プロセッサに渡され、慣性プロセッサによってイベントが発生することです。 図の左上にある WM_TOUCH メッセージで、 TOUCHEVENTF_UP フラグを持つメッセージでは、タッチ メッセージを使用して、慣性プロセッサと操作プロセッサを含むフォーカス内のオブジェクトを識別します。 後続 のWM_TOUCH メッセージは操作プロセッサに送信され、操作プロセッサはアプリケーション UI の更新を実行します。 操作が完了すると、操作のベロシティ値を使用して慣性プロセッサが設定されます。 中央の列に示すように、IInertiaProcessor インターフェイスで Process メソッドまたは ProcessTime メソッドが呼び出され、呼び出しによってプロセッサの処理が完了するまで、別のスレッドでタイマーまたはその他のループが使用されます。 これらの呼び出しが行われている間、操作イベントが発生します。操作イベントは、 _IManipulationEvents インターフェイスに基づいて操作イベント シンクによって処理されます。 図の右下のセクションで、このイベント シンクは、イベント シンクのイベント ハンドラーを介して発生した操作イベントに基づいて、アプリケーション UI の更新を実行します。
関連トピック