檢視原始碼 wxAuiManager (wx v2.4.3)
wxAuiManager
是 wxAUI 類別框架的核心類別。
wxAuiManager
使用窗格的 wxAuiPaneInfo
資訊來決定每個窗格的停靠和浮動行為,藉此管理與特定 wxFrame
相關聯的窗格。
wxAuiManager
使用 wxWidgets 的尺寸調整機制來規劃每個框架的佈局。它使用可替換的停靠繪圖類別來進行所有繪圖,因此所有繪圖都集中在一個區域,並且可以根據應用程式的特定需求進行自訂。
wxAuiManager
的運作方式如下:程式設計師將窗格新增至類別,或變更現有窗格的屬性(停靠位置、浮動狀態、顯示狀態等)。若要套用這些變更,則會呼叫 wxAuiManager
的 update/1
函式。這種批次處理可以用來避免閃爍,方法是一次修改多個窗格,然後透過呼叫 update/1
來「提交」所有變更。
可以輕鬆新增窗格
稍後,可以輕鬆修改位置。以下程式碼將在工具視窗中浮動現有的窗格
圖層、列、方向和位置
在 wxAUI 內部,停靠佈局是透過檢查數個窗格參數來計算的。其中有四個參數對於決定窗格的最終位置非常重要
方向:每個停靠的窗格都有一個方向:上、下、左、右或中心。這很容易理解。窗格將放置在此變數指定的位置。
位置:一個停靠區內可以放置多個窗格。想像一下,兩個窗格停靠在視窗的左側。一個窗格可以放置在另一個窗格之上。在按比例管理的停靠區中,窗格位置表示其順序位置,從零開始。因此,在我們兩個窗格停靠在左側的場景中,停靠區中的頂部窗格的位置為 0,第二個窗格將佔據位置 1。
列:列可以讓兩個停靠區並排放置。最常見發生這種情況的地方之一是在工具列中。允許多個工具列列,第一列為列 0,第二列為 1。列也可以用於垂直停靠的窗格。
圖層:圖層類似於洋蔥。圖層 0 是管理窗格的最中心。因此,如果窗格位於圖層 0 中,它將最靠近中心視窗(有時也稱為「內容視窗」)。增加圖層會「吞噬」所有較低值的圖層。這看起來非常像多個列,但不同之處在於較低層級中的所有窗格都會讓位於較高層級中的窗格。了解圖層的最佳方法是執行 wxAUI 範例。
樣式
此類別支援以下樣式
wxAUI_MGR_ALLOW_FLOATING:允許取消停靠窗格以形成
wxMiniFrame
。wxAUI_MGR_ALLOW_ACTIVE_PANE:在窗格啟動時變更其標題列的顏色。
wxAUI_MGR_TRANSPARENT_DRAG:在移動窗格時使其透明。
wxAUI_MGR_TRANSPARENT_HINT:停靠的可能位置以半透明區域指示。
wxAUI_MGR_VENETIAN_BLINDS_HINT:停靠的可能位置以逐漸出現的部分透明提示指示。
wxAUI_MGR_RECTANGLE_HINT:停靠的可能位置以矩形外框指示。
wxAUI_MGR_HINT_FADE:窗格可停靠的半透明區域會逐漸顯示。
wxAUI_MGR_NO_VENETIAN_BLINDS_FADE:與 wxAUI_MGR_VENETIAN_BLINDS_HINT 搭配使用,以立即顯示停靠提示。
wxAUI_MGR_LIVE_RESIZE:調整停靠窗格的大小時,其內容會即時重新整理(而不是僅移動邊框並在最後重新整理內容)。
wxAUI_MGR_DEFAULT:預設行為,結合:wxAUI_MGR_ALLOW_FLOATING | wxAUI_MGR_TRANSPARENT_HINT | wxAUI_MGR_HINT_FADE | wxAUI_MGR_NO_VENETIAN_BLINDS_FADE。
請參閱
此類別衍生自,並且可以使用以下類別的函式
wxWidgets 文件:wxAuiManager
事件
從此類別發出的事件類型
摘要
函式
銷毀物件
告知 wxAuiManager
停止管理由視窗指定的窗格。
傳回框架管理員管理的所有窗格的陣列。
傳回目前使用的繪圖提供者。
傳回目前的停靠限制值。
傳回目前的 ?wxAuiManagerOption 的旗標。
傳回目前由 wxAuiManager
管理的框架。
呼叫此方法將傳回給定視窗的 wxAuiManager
。
getPane/2
用於透過視窗指標或窗格名稱來查閱 wxAuiPaneInfo
物件,該名稱會作為視窗窗格的唯一 ID。
hideHint/1
會隱藏任何可能可見的停靠提示。
此方法用於將先前未管理的窗格視窗插入框架管理員中,或將目前管理的窗格插入其他位置。
loadPaneInfo/3
類似於 LoadPerspective,不同之處在於它只會載入關於單一窗格的資訊。
載入已儲存的透視。
建構函式。
savePaneInfo/2
類似於 SavePerspective,不同之處在於它只會儲存關於單一窗格的資訊。
將整個使用者介面佈局儲存到編碼的 wxString
中(未在 wx 中實作),然後應用程式可以儲存該佈局(可能使用 wxConfig)。
指示 wxAuiManager
針對所有繪圖呼叫使用參數 art\_provider
指定的繪圖提供者。
當使用者透過將視窗拖曳到停靠位置來建立新的停靠區時,視窗的較大尺寸通常會建立一個難以操作的大型停靠區。
此方法用於指定 ?wxAuiManagerOption 的旗標。
呼叫以指定要由 wxAuiManager
管理的框架或視窗。
此函式由控制項使用,以在指定的矩形處明確顯示提示視窗。
將管理視窗與管理員取消關聯。
在對任何受管理的窗格進行任何次數的變更之後,會呼叫此方法。
類型
-type wxAuiManager() :: wx:wx_object().
函式
-spec addPane(This, Window) -> boolean() when This :: wxAuiManager(), Window :: wxWindow:wxWindow().
-spec addPane(This, Window, [Option]) -> boolean() when This :: wxAuiManager(), Window :: wxWindow:wxWindow(), Option :: {direction, integer()} | {caption, unicode:chardata()}; (This, Window, Pane_info) -> boolean() when This :: wxAuiManager(), Window :: wxWindow:wxWindow(), Pane_info :: wxAuiPaneInfo:wxAuiPaneInfo().
addPane/4
會告知框架管理員開始管理子視窗。
此函式有多個版本。第一個版本允許完整範圍的窗格參數可能性。第二個版本用於不需要太多組態的較簡單使用者介面。最後一個版本允許指定拖放位置,該位置將決定要新增窗格的位置。
-spec addPane(This, Window, Pane_info, Drop_pos) -> boolean() when This :: wxAuiManager(), Window :: wxWindow:wxWindow(), Pane_info :: wxAuiPaneInfo:wxAuiPaneInfo(), Drop_pos :: {X :: integer(), Y :: integer()}.
-spec destroy(This :: wxAuiManager()) -> ok.
銷毀物件
-spec detachPane(This, Window) -> boolean() when This :: wxAuiManager(), Window :: wxWindow:wxWindow().
告知 wxAuiManager
停止管理由視窗指定的窗格。
如果視窗位於浮動框架中,則會將其重新設定為由 wxAuiManager
管理的框架。
-spec getAllPanes(This) -> [wxAuiPaneInfo:wxAuiPaneInfo()] when This :: wxAuiManager().
傳回框架管理員管理的所有窗格的陣列。
-spec getArtProvider(This) -> wxAuiDockArt:wxAuiDockArt() when This :: wxAuiManager().
傳回目前使用的繪圖提供者。
請參閱:wxAuiDockArt
-spec getDockSizeConstraint(This) -> {Widthpct :: number(), Heightpct :: number()} when This :: wxAuiManager().
傳回目前的停靠限制值。
如需詳細資訊,請參閱 setDockSizeConstraint/3
。
-spec getFlags(This) -> integer() when This :: wxAuiManager().
傳回目前的 ?wxAuiManagerOption 的旗標。
-spec getManagedWindow(This) -> wxWindow:wxWindow() when This :: wxAuiManager().
傳回目前由 wxAuiManager
管理的框架。
-spec getManager(Window) -> wxAuiManager() when Window :: wxWindow:wxWindow().
呼叫此方法將傳回給定視窗的 wxAuiManager
。
window
參數應指定由 wxAuiManager
管理的框架或視窗的任何子視窗或子子視窗。
window
參數不需要由管理員本身管理,甚至不需要是受管理視窗的子視窗或子子視窗。但它必須位於受管理視窗下方的視窗階層內。
-spec getPane(This, Name) -> wxAuiPaneInfo:wxAuiPaneInfo() when This :: wxAuiManager(), Name :: unicode:chardata(); (This, Window) -> wxAuiPaneInfo:wxAuiPaneInfo() when This :: wxAuiManager(), Window :: wxWindow:wxWindow().
getPane/2
用於透過視窗指標或窗格名稱來查閱 wxAuiPaneInfo
物件,該名稱會作為視窗窗格的唯一 ID。
然後可以修改傳回的 wxAuiPaneInfo
物件,以變更窗格的外觀、狀態或位置。在對 wxAuiPaneInfo
進行一或多次修改後,應呼叫 update/1
以將變更提交至使用者介面。如果查閱失敗(表示在管理員中找不到窗格),則對傳回的 wxAuiPaneInfo
的 IsOk() 方法的呼叫將傳回 false。
-spec hideHint(This) -> ok when This :: wxAuiManager().
hideHint/1
會隱藏任何可能可見的停靠提示。
-spec insertPane(This, Window, Insert_location) -> boolean() when This :: wxAuiManager(), Window :: wxWindow:wxWindow(), Insert_location :: wxAuiPaneInfo:wxAuiPaneInfo().
-spec insertPane(This, Window, Insert_location, [Option]) -> boolean() when This :: wxAuiManager(), Window :: wxWindow:wxWindow(), Insert_location :: wxAuiPaneInfo:wxAuiPaneInfo(), Option :: {insert_level, integer()}.
此方法用於將先前未管理的窗格視窗插入框架管理員中,或將目前管理的窗格插入其他位置。
insertPane/4
將會將所有窗格、列或停靠區推開,並將視窗插入由 insert_location
指定的位置。
因為 insert_location
可以指定窗格、停靠列或停靠圖層,因此 insert_level
參數用於消除此歧義。參數 insert_level
可以採用 wxAUI_INSERT_PANE、wxAUI_INSERT_ROW 或 wxAUI_INSERT_DOCK 的值。
-spec loadPaneInfo(This, Pane_part, Pane) -> ok when This :: wxAuiManager(), Pane_part :: unicode:chardata(), Pane :: wxAuiPaneInfo:wxAuiPaneInfo().
loadPaneInfo/3
類似於 LoadPerspective,不同之處在於它只會載入關於單一窗格的資訊。
此方法會將序列化資料寫入傳遞的窗格中。不會修改 UI 元素的指標。
注意:此作業也會變更窗格資訊中的名稱!
請參閱:savePaneInfo/2
-spec loadPerspective(This, Perspective) -> boolean() when This :: wxAuiManager(), Perspective :: unicode:chardata().
-spec loadPerspective(This, Perspective, [Option]) -> boolean() when This :: wxAuiManager(), Perspective :: unicode:chardata(), Option :: {update, boolean()}.
載入已儲存的透視。
透視是 AUI 管理視窗的佈局狀態。
所有目前存在的在「透視」中具有相同名稱(「等效」)物件的窗格都將接收「透視」中物件的佈局參數。沒有「透視」等效項目的現有窗格保持不變,「透視」中沒有管理員等效項目的物件會被忽略。
請參閱:loadPaneInfo/3
-spec new() -> wxAuiManager().
等同於 new([])
。
-spec new([Option]) -> wxAuiManager() when Option :: {managed_wnd, wxWindow:wxWindow()} | {flags, integer()}.
建構函式。
-spec savePaneInfo(This, Pane) -> unicode:charlist() when This :: wxAuiManager(), Pane :: wxAuiPaneInfo:wxAuiPaneInfo().
savePaneInfo/2
類似於 SavePerspective,不同之處在於它只會儲存關於單一窗格的資訊。
傳回值:窗格的序列化佈局參數會傳回在字串內。不會序列化關於儲存在窗格中的 UI 元素指標的資訊。
請參閱:loadPaneInfo/3
-spec savePerspective(This) -> unicode:charlist() when This :: wxAuiManager().
將整個使用者介面佈局儲存到編碼的 wxString
中(未在 wx 中實作),然後應用程式可以儲存該佈局(可能使用 wxConfig)。
請參閱:loadPaneInfo/3
請參閱:savePaneInfo/2
-spec setArtProvider(This, Art_provider) -> ok when This :: wxAuiManager(), Art_provider :: wxAuiDockArt:wxAuiDockArt().
指示 wxAuiManager
針對所有繪圖呼叫使用參數 art\_provider
指定的繪圖提供者。
這允許可外掛的外觀和風格功能。先前的繪圖提供者物件(如果有的話)將由 wxAuiManager
刪除。
請參閱:wxAuiDockArt
-spec setDockSizeConstraint(This, Widthpct, Heightpct) -> ok when This :: wxAuiManager(), Widthpct :: number(), Heightpct :: number().
當使用者透過將視窗拖曳到停靠位置來建立新的停靠區時,視窗的較大尺寸通常會建立一個難以操作的大型停靠區。
預設情況下,wxAuiManager
會將任何新停靠視窗的大小限制為視窗大小的 1/3。對於水平停靠視窗,這將是視窗高度的 1/3。對於垂直停靠視窗,則是寬度的 1/3。
呼叫此函式將調整此限制值。這些數字必須介於 0.0 和 1.0 之間。例如,使用 0.5 和 0.5 呼叫 SetDockSizeContraint 將使新的停靠視窗限制為整個管理視窗大小的一半。
-spec setFlags(This, Flags) -> ok when This :: wxAuiManager(), Flags :: integer().
此方法用於指定 ?wxAuiManagerOption 的旗標。
flags
指定允許修改框架管理行為的選項。
-spec setManagedWindow(This, Managed_wnd) -> ok when This :: wxAuiManager(), Managed_wnd :: wxWindow:wxWindow().
呼叫以指定要由 wxAuiManager
管理的框架或視窗。
框架管理不僅限於框架。也允許子視窗或自訂控制項。
-spec showHint(This, Rect) -> ok when This :: wxAuiManager(), Rect :: {X :: integer(), Y :: integer(), W :: integer(), H :: integer()}.
此函式由控制項使用,以在指定的矩形處明確顯示提示視窗。
它很少被呼叫,主要用於實作自訂窗格拖放行為的控制項。指定的矩形應為螢幕座標。
-spec unInit(This) -> ok when This :: wxAuiManager().
將管理視窗與管理員取消關聯。
此函式可以在受管理的框架或視窗被銷毀之前呼叫,但是,自 wxWidgets 3.1.4 起,不需要明確呼叫它,因為它將在視窗被銷毀時以及管理員本身被銷毀時自動呼叫。
-spec update(This) -> ok when This :: wxAuiManager().
在對任何受管理的窗格進行任何次數的變更之後,會呼叫此方法。
在呼叫 addPane/4
或 insertPane/4
之後,必須調用 update/1
以「實現」或「提交」變更。此外,可以對 wxAuiPaneInfo
結構(使用 getPane/2
檢索)進行任意數量的變更,但要實現這些變更,必須呼叫 update/1
。這種結構可以透過一次更新整個佈局來避免窗格閃爍。