次の方法で共有


空間ナビゲーションと論理ナビゲーション

クライアントは、 IAccessible::accNavigate を呼び出し、 ナビゲーション定数の 1 つを指定することで、同じコンテナー内の別のオブジェクトに空間的または論理的に近いオブジェクトに関する情報を取得します。

空間ナビゲーションを使用すると、クライアントは画面上の位置に基づいてオブジェクトに移動します。 クライアントは、現在のオブジェクトから上、下、左、または右に移動して、同じコンテナー内の別のオブジェクトに関する情報を取得します。

論理ナビゲーション クライアントでは、サーバーによって決定された別のオブジェクトの前または後にあるオブジェクトに移動します。 クライアントは、次の 2 つの方法でオブジェクトのすべての子に移動します。

方向に関係なく、ナビゲーションは親オブジェクトに属する表示される各子にアクセスします。 非表示の子は、論理ナビゲーションでスキップされる場合があります。 さらに、各子は 1 回だけアクセスされ、ナビゲーションはループしません。 つまり、クライアントが最初のオブジェクトの前または最後のオブジェクトの後を移動しようとすると、メソッドは失敗します。

空間ナビゲーションと論理ナビゲーションは関連しています。 たとえば、水平方向のツール バーでは、 NAVDIR_RIGHT を使用して メソッドを呼び出すと、 NAVDIR_NEXT を使用して メソッドを呼び出すのと同じ結果が生成されます。

ナビゲーションの開始オブジェクトは、NAVDIR_FIRSTCHILDまたはNAVDIR_LASTCHILDが指定されている場合を除き、自身のオブジェクトまたはオブジェクトの子のいずれかです。この場合、ナビゲーションはオブジェクト自体から開始する必要があります。

クライアントがアクセス可能なオブジェクトから兄弟ユーザー インターフェイス要素に移動する場合、または varStartlVal メンバーがCHILDID_SELF、navDir の指定されたフラグがNAVDIR_FIRSTCHILDまたはNAVDIR_LASTCHILDを除く任意のナビゲーション フラグである場合、pvarEnd の結果は子 ID または IDispatch インターフェイスになります。 pvarEnd に子 ID が含まれている場合、クライアントはまず、このユーザー インターフェイス要素から移動したり、それに関する詳細情報を取得したりするために、親の IAccessible インターフェイスへのポインターを取得する必要があります。 親オブジェクトを取得するために、クライアントは兄弟オブジェクトの IAccessible::get_accParent プロパティまたはナビゲーションの開始オブジェクトを呼び出します。

EnumChildWindows 関数を呼び出すことによって、クライアントはすべてのフローティング オブジェクトに関する情報を持っている必要があることに注意してください。 浮動オブジェクトは親にクリップされないため、クライアントは画面上で互いに近い 2 つのオブジェクト間の階層関係に関する情報を持っていません。

次の図は、親にクリップされないフローティング オブジェクトの例です。

より大きな Microsoft Developer Studio ウィンドウの上に浮かぶ開いているウィンドウのスクリーン ショット

論理ナビゲーションでの順序の確立

論理ナビゲーションでは、オブジェクトを設計する開発者がそれらの間の関係を確立します。 論理ナビゲーションは、空間ナビゲーションよりも主観的です。 また、論理ナビゲーションの順序は、子 ID で使用される順序と同じではありません。

画面の場所を持つオブジェクトの場合、サーバー開発者は、ほとんどのユーザーが論理的と見なす方法でナビゲーション順序を確立する必要があります。 たとえば、英語を話す国/地域では、これは左から右、上から下への順序を意味します。

論理ナビゲーション順序では、キーボード ナビゲーション順序を並列にする必要があります。 たとえば、ダイアログ ボックスには 、[OK] ボタンと [キャンセル] のプッシュ ボタンと、いくつかの編集コントロールが含まれます。 IAccessible::accNavigate を呼び出して、そのダイアログ ボックス内の次または前のオブジェクトに移動するクライアントは、Tab キーまたは Shift キーを押しながら Tab キーを押して項目間でフォーカスを移動する場合と同じ順序で移動します。

画面の場所が定義されていないオブジェクトの場合、論理順序はサーバー開発者によって決定され、クライアント開発者はそれについて何も想定しないでください。 たとえば、一時的に非表示になっているオブジェクトなど、非表示のオブジェクトが可視オブジェクトと散在することは許容されます。