空間和邏輯流覽
用戶端會呼叫 IAccessible::accNavigate 並指定其中一個巡覽常數,以空間或邏輯方式擷取相同容器內另一個對象的相關信息。
使用 空間導覽 客戶端會根據對象在畫面上的位置巡覽至物件。 用戶端會從目前物件向上、向下、向左或向右流覽,以取得相同容器內另一個對象的相關信息。
使用 邏輯導覽 用戶端,流覽至邏輯上位於或之後另一個對象的物件,由伺服器決定。 用戶端會以兩種方式巡覽至物件的所有子系:
- 使用 NAVDIR_FIRSTCHILD 啟動導覽,然後使用 NAVDIR_NEXT重複呼叫 方法。
- 使用 NAVDIR_LASTCHILD 啟動導覽,並使用 NAVDIR_PREVIOUS 重複呼叫 方法。
無論方向為何,導覽都會瀏覽屬於父物件的每個可見子系。 不可見的子系可能會略過邏輯導覽。 此外,每個子系只會流覽一次,且導覽不會迴圈。 也就是說,如果客戶端嘗試在第一個物件之前或最後一個對象之後巡覽,方法就會失敗。
空間和邏輯瀏覽是相關的。 例如,在水準工具列中,使用 NAVDIR_RIGHT 呼叫 方法應該會產生與使用 NAVDIR_NEXT 呼叫 方法相同的結果。
導覽的起始物件是它本身的物件或其中一個物件的子系,但指定NAVDIR_FIRSTCHILD或NAVDIR_LASTCHILD時除外;在此情況下,導覽必須從物件本身開始。
如果用戶端從可存取的物件巡覽至同層級使用者介面元素,或者 varStart 的 lVal 成員CHILDID_SELF且 navDir 中指定的旗標是除了NAVDIR_FIRSTCHILD或NAVDIR_LASTCHILD之外的任何導覽旗標,pvarEnd 的結果就是子標識符或 IDispatch 介面。 如果 pvarEnd 包含子標識碼,客戶端必須先取得父系 IAccessible 介面的指標,才能從這個使用者介面元素巡覽,或取得其詳細資訊。 若要取得父物件,用戶端會呼叫 同層級物件的IAccessible::get_accParent 屬性或導覽的起始物件。
請注意,客戶端必須呼叫 EnumChildWindows 函式,以取得所有浮動對象的相關信息。 由於浮動物件未裁剪至其父系,因此客戶端沒有畫面上兩個對象之間階層式關聯性的相關信息。
下圖是未裁剪至其父系之浮動物件的範例。
在邏輯導覽中建立順序
在邏輯導覽中,設計物件之開發人員會建立它們之間的關聯性。 邏輯流覽比空間流覽更具主觀性。 此外,邏輯導覽中的順序與子標識碼所使用的順序不同。
對於具有螢幕位置的物件,伺服器開發人員應該以大部分使用者認為邏輯的方式建立瀏覽順序。 例如,在英文國家/地區中,這表示由左至右、由上至下的順序。
邏輯瀏覽順序必須平行處理鍵盤瀏覽順序。 例如,對話框包含 [確定 ] 和 [取消] 按鈕和一些編輯控件。 呼叫 IAccessible::accNavigate 的用戶端,巡覽至該對話框中的下一個或上一個物件,會依使用者按下 TAB 或 SHIFT+TAB 鍵的順序移動專案之間的焦點。
對於沒有定義螢幕位置的對象,邏輯順序是由伺服器開發人員決定,而客戶端開發人員應該不會對此做出任何假設。 例如,非可見物件可以接受,例如只暫時隱藏的物件,與可見物件交織在一起。