直接操作

直接操作 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 を呼び出します。 アプリケーションは、処理する必要がある連絡先と、それらの連絡先に反応する必要があるビューポートについて、直接操作に通知します。 キーボードとマウスの入力には特別な pointerId 値があるため、直接操作で適切に処理できます。

上記の基本的なケースでは、 SetContact が呼び出されると、いくつかのことが発生します。

  • ユーザーがパンを実行すると、 WM/_POINTERCAPTURECHANGED メッセージがアプリケーションに送信され、連絡先が直接操作によって使用されたことを通知します。
  • ユーザーが移動を移動すると、ビューポートは DirectComposition ラッパーによって使用される更新イベントを発生させて、画面の視覚的な更新を促進します。 ビューポートでユーザーがパンすると、コンテンツは連絡先の下でスムーズに移動するように見えます。
  • ユーザーが連絡先を離すと、ユーザーは、最終的な休憩場所に到達するまで徐々に減速しながら、慣性アニメーションに遷移するにつれてコンテンツが移動し続けるのを確認します。

キーボードとマウス入力の処理

直接操作を使用すると、キーボードとマウスのメッセージを ProcessInput API を介してアプリケーション UI スレッドから手動で転送し、直接操作で適切に処理できるようにします。

DirectManipulation と HWND

直接操作は、そのウィンドウのポインター入力メッセージを受信して処理するために、Win32 HWND に関連付けられます。 ダイレクト操作は出力値を計算すると、アプリケーションに実装されている直接操作 コンポーネント オブジェクト モデル (COM) オブジェクトへの非同期コールバックを行います。 これらのコールバックは、オブジェクトに適用された変換についてアプリケーションに通知します。 直接操作は、Activate を呼び出すことによって、指定された HWND で アクティブ化されます。

サポート ドキュメント