空間和邏輯導覽
用戶端會呼叫 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 的順序移動,在專案之間移動焦點。
對於沒有定義螢幕位置的物件,邏輯順序是由伺服器開發人員決定,而用戶端開發人員應該不會假設它。 例如,非可見物件可以接受,例如只暫時隱藏的物件,以與可見物件交錯。
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應