查看源代码 wxAuiManager (wx v2.4.3)

wxAuiManager 是 wxAUI 类框架的核心类。

wxAuiManager 使用窗格的 wxAuiPaneInfo 信息来确定每个窗格的停靠和浮动行为,从而管理与特定 wxFrame 相关联的窗格。

wxAuiManager 使用 wxWidgets 的尺寸器机制来规划每个框架的布局。它使用可替换的停靠绘制类来完成所有绘制,因此所有绘制都位于一个区域中,并且可以根据应用程序的特定需求进行自定义。

wxAuiManager 的工作原理如下:程序员向类中添加窗格,或更改现有窗格属性(停靠位置、浮动状态、显示状态等)。要应用这些更改,需要调用 wxAuiManagerupdate/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

事件

此类发出的事件类型

摘要

函数

addPane/4 告诉框架管理器开始管理子窗口。

销毁对象

告诉 wxAuiManager 停止管理窗口指定的窗格。

返回框架管理器管理的所有窗格的数组。

返回当前正在使用的艺术提供程序。

返回当前停靠约束值。

返回当前 ?wxAuiManagerOption 的标志。

返回当前由 wxAuiManager 管理的框架。

调用此方法将返回给定窗口的 wxAuiManager

getPane/2 用于通过窗口指针或窗格名称(充当窗口窗格的唯一 ID)查找 wxAuiPaneInfo 对象。

hideHint/1 隐藏可能可见的任何停靠提示。

此方法用于将以前未管理的窗格窗口插入到框架管理器中,或将当前管理的窗格插入到其他位置。

loadPaneInfo/3 类似于 LoadPerspective,但区别在于它仅加载有关单个窗格的信息。

加载已保存的透视图。

等效于 new([])

构造函数。

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().

等效于 addPane(This, Window, [])

-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 告诉框架管理器开始管理子窗口。

此函数有多个版本。第一个版本允许所有可能的窗格参数。第二个版本用于不需要太多配置的更简单的用户界面。最后一个版本允许指定放置位置,这将决定添加窗格的位置。

链接到此函数

addPane(This, Window, Pane_info, Drop_pos)

查看源代码
-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.

销毁对象

链接到此函数

detachPane(This, Window)

查看源代码
-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

链接到此函数

getDockSizeConstraint(This)

查看源代码
-spec getDockSizeConstraint(This) -> {Widthpct :: number(), Heightpct :: number()}
                               when This :: wxAuiManager().

返回当前停靠约束值。

有关更多信息,请参阅 setDockSizeConstraint/3

-spec getFlags(This) -> integer() when This :: wxAuiManager().

返回当前 ?wxAuiManagerOption 的标志。

链接到此函数

getManagedWindow(This)

查看源代码
-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 隐藏可能可见的任何停靠提示。

链接到此函数

insertPane(This, Window, Insert_location)

查看源代码
-spec insertPane(This, Window, Insert_location) -> boolean()
                    when
                        This :: wxAuiManager(),
                        Window :: wxWindow:wxWindow(),
                        Insert_location :: wxAuiPaneInfo:wxAuiPaneInfo().

等效于 insertPane(This, Window, Insert_location, [])

-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 的值。

链接到此函数

loadPaneInfo(This, Pane_part, Pane)

查看源代码
-spec loadPaneInfo(This, Pane_part, Pane) -> ok
                      when
                          This :: wxAuiManager(),
                          Pane_part :: unicode:chardata(),
                          Pane :: wxAuiPaneInfo:wxAuiPaneInfo().

loadPaneInfo/3 类似于 LoadPerspective,但区别在于它仅加载有关单个窗格的信息。

此方法将序列化数据写入传递的窗格。指向 UI 元素的指针不会被修改。

注意:此操作还会更改窗格信息中的名称!

参见:loadPerspective/3

参见:savePaneInfo/2

参见:savePerspective/1

链接到此函数

loadPerspective(This, Perspective)

查看源代码
-spec loadPerspective(This, Perspective) -> boolean()
                         when This :: wxAuiManager(), Perspective :: unicode:chardata().

等效于 loadPerspective(This, Perspective, [])

-spec loadPerspective(This, Perspective, [Option]) -> boolean()
                         when
                             This :: wxAuiManager(),
                             Perspective :: unicode:chardata(),
                             Option :: {update, boolean()}.

加载已保存的透视图。

透视是 AUI 管理窗口的布局状态。

所有当前存在的在“透视”中具有相同名称(“等效”)的对象的窗格,都将接收“透视”中对象的布局参数。现有但“透视”中没有等效对象的窗格保持不变,“透视”中存在但在管理器中没有等效对象的对象将被忽略。

参见:loadPaneInfo/3

参见:loadPerspective/3

参见:savePerspective/1

-spec new() -> wxAuiManager().

等效于 new([])

-spec new([Option]) -> wxAuiManager()
             when Option :: {managed_wnd, wxWindow:wxWindow()} | {flags, integer()}.

构造函数。

链接到此函数

savePaneInfo(This, Pane)

查看源代码
-spec savePaneInfo(This, Pane) -> unicode:charlist()
                      when This :: wxAuiManager(), Pane :: wxAuiPaneInfo:wxAuiPaneInfo().

savePaneInfo/2 类似于 SavePerspective,但区别在于它仅保存有关单个窗格的信息。

返回:窗格的序列化布局参数将在字符串中返回。有关存储在窗格中的 UI 元素指针的信息不会被序列化。

参见:loadPaneInfo/3

参见:loadPerspective/3

参见:savePerspective/1

-spec savePerspective(This) -> unicode:charlist() when This :: wxAuiManager().

将整个用户界面布局保存为编码的 wxString (未在 wx 中实现),然后应用程序可以存储该字符串(可能使用 wxConfig)。

参见:loadPerspective/3

参见:loadPaneInfo/3

参见:savePaneInfo/2

链接到此函数

setArtProvider(This, Art_provider)

查看源代码
-spec setArtProvider(This, Art_provider) -> ok
                        when This :: wxAuiManager(), Art_provider :: wxAuiDockArt:wxAuiDockArt().

指示 wxAuiManager 对所有绘制调用使用参数 art\_provider 指定的艺术提供程序。

这允许可插拔的外观功能。先前的艺术提供程序对象(如果有)将被 wxAuiManager 删除。

请参阅:wxAuiDockArt

链接到此函数

setDockSizeConstraint(This, Widthpct, Heightpct)

查看源代码
-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 指定允许修改框架管理行为的选项。

链接到此函数

setManagedWindow(This, Managed_wnd)

查看源代码
-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/4insertPane/4 后,必须调用 update/1 才能“实现”或“提交”更改。此外,可以对 wxAuiPaneInfo 结构(使用 getPane/2 获取)进行任意数量的更改,但是要实现这些更改,必须调用 update/1。这种构造允许通过一次更新整个布局来避免窗格闪烁。