查看源代码 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
用于通过窗口指针或窗格名称(充当窗口窗格的唯一 ID)查找 wxAuiPaneInfo
对象。
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
用于通过窗口指针或窗格名称(充当窗口窗格的唯一 ID)查找 wxAuiPaneInfo
对象。
返回的 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 元素的指针不会被修改。
注意:此操作还会更改窗格信息中的名称!
-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 管理窗口的布局状态。
所有当前存在的在“透视”中具有相同名称(“等效”)的对象的窗格,都将接收“透视”中对象的布局参数。现有但“透视”中没有等效对象的窗格保持不变,“透视”中存在但在管理器中没有等效对象的对象将被忽略。
-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 元素指针的信息不会被序列化。
-spec savePerspective(This) -> unicode:charlist() when This :: wxAuiManager().
将整个用户界面布局保存为编码的 wxString
(未在 wx 中实现),然后应用程序可以存储该字符串(可能使用 wxConfig)。
-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
。这种构造允许通过一次更新整个布局来避免窗格闪烁。