直接操作
直接操作 API を使用すると、優れたパン、ズーム、ドラッグのユーザー エクスペリエンスを作成できます。 これを行うには、領域またはオブジェクトのタッチ入力を処理し、出力変換を生成し、UI 要素に変換を適用します。 直接操作を使用すると、スレッド外の入力処理、オプションのオフスレッド入力ヒット テスト、入力/出力予測を使用して、応答性を最適化し、待機時間を短縮できます。
直接操作を使用してタッチ操作を処理するアプリケーションには、一般的なユーザー操作の のガイドラインに準拠した流動的な Windows 8 アニメーションと相互作用フィードバック動作が表示されます。
開発者対象ユーザー
ダイレクト操作 API は、C/C++ を知り、コンポーネント オブジェクト モデル (COM)を十分に理解しており、Windows プログラミングの概念に精通している経験豊富な開発者を対象としています。
実行時の要件
直接操作は Windows 8 で導入されました。 これは、32 ビットと 64 ビットの両方のバージョンに含まれています。
DirectManipulation を使用する理由
操作を簡単かつ一貫した方法で処理する
直接操作は、リージョンまたはオブジェクトの動作と相互作用を事前に宣言することによって機能します。 たとえば、多くの場合、Web ページはパンとズーム用に構成されます。 実行時に、入力は単純な API 呼び出しを介してこのリージョン/オブジェクトに関連付けられます。 この時点から、直接操作は、入力の処理、制約と個性の適用、出力変換の生成のすべての重い作業を行います。
応答性の高いタッチ アプリケーションを構築する
応答性を最適化し、待機時間を最小限に抑えるために、直接操作処理は UI スレッドとは別の独立したスレッドで行われます。 その結果、出力変換は UI スレッド上のアクティビティと並行して実行できます。 UI スレッド アクティビティには、アプリケーション ロジック、レンダリング、レイアウト、プロセッサ上のサイクルを消費するその他のものが含まれる場合があります。
実装の柔軟性
直接操作に含まれるインターフェイスは、入力処理、対話認識、フィードバック通知、UI の更新を包括的にサポートします。 インターフェイスには、DirectCompositionなどのシステム サービスも組み込まれています。
基本的な概念
最も基本的な直接操作の実装は、ビューポート、コンテンツ 、および 相互作用で構成されます。 ビューポート は、ユーザーの操作から入力を受信して処理できる領域です。 また、エンド ユーザーに表示されるコンテンツの領域でもあります。 コンテンツ は、エンドユーザーが見ることができる実際のオブジェクトであり、ユーザーの操作に応じて移動またはスケーリングされます。 直接操作でサポートされる主なユーザー 操作 (操作とも呼ばれます) は、パンとズームです。 これらの相互作用は、ビューポート内のコンテンツにそれぞれ平行移動変換またはスケール変換を適用します。 複数のビューポート (それぞれが独自のコンテンツを持つ) を 1 つのウィンドウで構成して、豊富な UI エクスペリエンスを作成できます。
この図は、パンの前後の基本的な直接操作の実装を示しています。
パンの前後の基本的な直接操作の実装を
直接操作の初期化中に、DCompDirectManipulationCompositor オブジェクトがインスタンス化され、直接操作に関連付けられます。 このオブジェクトは、システム コンポジター DirectCompositionのラッパーです。 オブジェクトは、出力変換を適用し、視覚的な更新を実行する役割を担います。
連絡先は、WM/_POINTERDOWN メッセージで提供 pointerId によって識別されるタッチ ポイントを表します。 WM_POINTERDOWN メッセージを受信すると、アプリケーションは SetContact呼び出します。 アプリケーションは、処理する必要がある連絡先と、それらの連絡先に対応する必要があるビューポートを Direct Manipulationababout に通知します。 キーボードとマウスの入力には特別な pointerId 値があるため、直接操作で適切に処理できます。
上記の基本的なケースでは、SetContactいくつかのことが発生します。
- ユーザーがパンを実行すると、WM/_POINTERCAPTURECHANGED メッセージがアプリケーションに送信され、連絡先が直接操作によって使用されたことを通知します。
- ユーザーが移動すると、ビューポートは、DirectComposition ラッパーによって使用される更新イベントを発生させて、画面の視覚的な更新を促進します。 ビューポートでユーザーがパンすると、コンテンツが接触の下を滑らかに移動するように見えます。
- ユーザーが連絡先を持ち上げると、ユーザーは、慣性アニメーションに移行するときにコンテンツが移動し続け、最終的な休憩場所に到達するまで徐々に減速します。
キーボードとマウス入力の処理
直接操作を使用すると、キーボードとマウスのメッセージを、ProcessInput API を介してアプリケーション UI スレッドから手動で転送できるため、直接操作で適切に処理できます。
DirectManipulation と HWND
直接操作は、そのウィンドウのポインター入力メッセージを受信して処理するために、Win32 HWND に関連付けられます。 ダイレクト操作は、出力値を計算すると、アプリケーションに実装されているオブジェクト コンポーネント オブジェクト モデル (COM) への非同期コールバックを行います。 これらのコールバックは、オブジェクトに適用された変換についてアプリケーションに通知します。 直接操作は、Activateを呼び出すことによって、指定された HWND でアクティブ化されます。
サポート ドキュメント
DirectManipulation で複数のビューポートを使用する
DirectManipulation を使用した入力処理の
BUILD 2013: WCL-022: タッチ、マウス、ペンの でデスクトップ アプリを優れたものにする
直接操作によるタッチ入力の処理の サンプル