Share via


空間和邏輯導覽

用戶端會呼叫 IAccessible::accNavigate 並指定其中一個 流覽常數,以空間或邏輯方式擷取相同容器內另一個物件的相關資訊。

使用 空間流覽 用戶端時,會根據畫面上的位置流覽至物件。 用戶端會從目前物件向上、向下、向左或向右流覽,以取得相同容器內另一個物件的相關資訊。

使用 邏輯流覽 用戶端,流覽至邏輯上位於或後面另一個物件的物件,如伺服器所決定。 用戶端會以兩種方式流覽至物件的所有子系:

  • 使用 NAVDIR_FIRSTCHILD 開始流覽 然後使用 NAVDIR_NEXT重複呼叫 方法。
  • 使用 NAVDIR_LASTCHILD 開始流覽 並使用 NAVDIR_PREVIOUS重複呼叫 方法。

無論方向為何,導覽都會流覽屬於父物件的每個可見子系。 使用邏輯導覽可以略過不可見的子系。 此外,每個子系只會流覽一次,而且導覽不會迴圈流覽。 也就是說,如果用戶端嘗試在第一個物件之前或最後一個物件之後巡覽,方法就會失敗。

空間和邏輯流覽是相關的。 例如,在水準工具列中,使用 NAVDIR_RIGHT 呼叫 方法應該會產生與使用 NAVDIR_NEXT呼叫 方法相同的結果。

導覽的起始物件是它自己或其中一個物件子系的物件,除非指定NAVDIR_FIRSTCHILDNAVDIR_LASTCHILD時除外;在此情況下,導覽必須從物件本身開始。

如果用戶端從可存取的物件巡覽至同層級使用者介面元素,或如果varStartlVal成員是CHILDID_SELF,且navDir中指定的旗標是除了NAVDIR_FIRSTCHILDNAVDIR_LASTCHILD以外的任何導覽旗標,則 pvarEnd的結果為子識別碼或IDispatch介面。 如果 pvarEnd 包含子識別碼,用戶端必須先取得父系 IAccessible 介面的指標,才能從這個使用者介面元素巡覽,或取得其詳細資訊。 若要取得父物件,用戶端會呼叫同層級物件的 IAccessible::get_accParent 屬性或導覽的起始物件。

請注意,用戶端必須透過呼叫 EnumChildWindows 函式,取得所有浮動物件的相關資訊。 因為浮動物件並未裁剪到其父代,所以用戶端在畫面上沒有兩個物件之間階層式關聯性的相關資訊。

下圖是未裁剪為其父系的浮動物件範例。

在較大的 Microsoft 開發人員 Studio 視窗上方浮動開啟視窗的螢幕擷取畫面

在邏輯導覽中建立順序

在邏輯導覽中,設計物件的開發人員會建立它們之間的關聯性。 邏輯流覽比空間導覽更為主旨。 此外,邏輯導覽中的順序與子識別碼使用的順序不同。

對於具有螢幕位置的物件,伺服器開發人員應該以大部分使用者考慮邏輯的方式建立流覽順序。 例如,在英文國家/地區中,這表示由左至右、由上至下的順序。

邏輯流覽順序必須平行處理鍵盤流覽順序。 例如,對話方塊包含 [確定 ] 和 [ 取消] 按鈕,以及一些編輯控制項。 呼叫 IAccessible::accNavigate 的用戶端,流覽至該對話方塊中的下一個或上一個物件,會依使用者按下 TAB 鍵或 SHIFT+TAB 的順序移動,在專案之間移動焦點。

對於沒有定義螢幕位置的物件,邏輯順序是由伺服器開發人員決定,而用戶端開發人員應該不會假設它。 例如,非可見物件可以接受,例如只暫時隱藏的物件,以與可見物件交錯。