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

框架是一个窗口,其大小和位置通常可以由用户更改。

它通常具有粗边框和标题栏,并且可以选择包含菜单栏、工具栏和状态栏。框架可以包含任何不是框架或对话框的窗口。

一个具有状态栏和工具栏的框架,通过 createStatusBar/2createToolBar/2 函数创建,会管理这些窗口并调整 wxWindow:getClientSize/1 返回的值,以反映应用程序窗口可用的剩余大小。

注意:应用程序通常应为框架定义一个 wxCloseEvent 处理程序,以响应系统关闭事件,例如,以便可以清理相关数据和子窗口。

默认事件处理

wxFrame 处理以下事件

  • wxEVT_SIZE: 如果框架只有一个子窗口,不包括状态栏和工具栏,则此子窗口会调整大小以占据整个框架客户区。如果存在两个或多个窗口,则应通过手动处理 wxEVT_SIZE 或使用尺寸器来显式布局它们;

  • wxEVT_MENU_HIGHLIGHT: 如果存在状态栏,默认实现会在状态栏的第一个窗格中显示与所选项目关联的帮助字符串。

样式

此类支持以下样式

  • wxDEFAULT_FRAME_STYLE: 定义为 wxMINIMIZE_BOXwxMAXIMIZE_BOXwxRESIZE_BORDER
    wxSYSTEM_MENUwxCAPTIONwxCLOSE_BOXwxCLIP_CHILDREN。
  • wxICONIZE: 将框架显示为图标化(最小化)。仅限 Windows。

  • wxCAPTION: 在框架上放置标题。请注意,在大多数系统上,wxMINIMIZE_BOX、wxMAXIMIZE_BOX 和 wxCLOSE_BOX 需要此标志,因为如果窗口根本没有标题栏,则无法显示相应的按钮。也就是说,如果未指定 wxCAPTION,则这些样式将被简单地忽略。

  • wxMINIMIZE: 与 wxICONIZE 相同。仅限 Windows。

  • wxMINIMIZE_BOX: 在框架上显示最小化框。

  • wxMAXIMIZE: 将框架显示为最大化。仅限 Windows 和 GTK+。

  • wxMAXIMIZE_BOX: 在框架上显示最大化框。请注意,在 wxGTK 下,也必须使用 wxRESIZE_BORDER,否则此样式将被忽略。

  • wxCLOSE_BOX: 在框架上显示关闭框。

  • wxSTAY_ON_TOP: 始终位于所有其他窗口之上,另请参阅 wxFRAME_FLOAT_ON_PARENT。

  • wxSYSTEM_MENU: 在窗口标题栏中显示一个包含各种窗口命令列表的系统菜单。与 wxMINIMIZE_BOX、wxMAXIMIZE_BOX 和 wxCLOSE_BOX 样式不同,此样式可以在没有 wxCAPTION 的情况下使用,至少在 Windows 下是这样,并且在这种情况下,可以在不显示在屏幕上的情况下使系统菜单可用。但是,建议仅将其与 wxCAPTION 一起使用,以确保在所有平台下行为一致。

  • wxRESIZE_BORDER: 在窗口周围显示可调整大小的边框。

  • wxFRAME_TOOL_WINDOW: 创建一个带有小标题栏的框架;该框架不会出现在 Windows 或 GTK+ 下的任务栏中。

  • wxFRAME_NO_TASKBAR: 创建一个正常的框架,但它不会出现在 Windows 或 GTK+ 下的任务栏中(请注意,它会在 Windows 下最小化到桌面窗口,这对于用户来说可能看起来很奇怪,因此最好仅在没有 wxMINIMIZE_BOX 样式的情况下使用此样式)。在 wxGTK 中,只有在窗口管理器支持 _NET_WM_STATE_SKIP_TASKBAR 提示时,才会遵守该标志。

  • wxFRAME_FLOAT_ON_PARENT: 框架将始终位于其父级的顶部(与 wxSTAY_ON_TOP 不同)。使用此样式创建的框架必须具有非 NULL 父级。

  • wxFRAME_SHAPED: 允许使用此样式的窗口通过 wxTopLevelWindow:setShape/2 方法更改其形状。默认的框架样式用于正常的、可调整大小的框架。要创建用户无法调整大小的框架,可以使用以下样式组合

另请参阅 overview_windowstyles。

额外样式

此类支持以下额外样式

  • wxFRAME_EX_CONTEXTHELP: 在 Windows 下,在标题上放置一个查询按钮。按下后,Windows 将进入上下文相关的帮助模式,如果用户单击应用程序窗口,wxWidgets 将发送 wxEVT_HELP 事件。请注意,这是一个扩展样式,必须在调用 Create 之前通过调用 SetExtraStyle 来设置(两步构造)。您不能将此样式与 wxMAXIMIZE_BOX 或 wxMINIMIZE_BOX 一起使用,因此对于具有此样式的框架,您应使用 wxDEFAULT_FRAME_STYLE ~ (wxMINIMIZE_BOX | wxMAXIMIZE_BOX)(默认情况下,对话框没有最小化或最大化框)

  • wxFRAME_EX_METAL: 在 macOS 上,具有此样式的框架将以金属外观显示。这是一种额外的样式。

参见

此类派生自以下类,并可以使用以下类的函数

wxWidgets 文档: wxFrame

事件

此类发出的事件类型

摘要

函数

用于两步框架构造。

在框架底部创建状态栏。

在框架的顶部或左侧创建工具栏。

销毁对象

返回框架客户区的原点(以客户坐标表示)。

返回指向当前与框架关联的菜单栏的指针(如果有)。

返回指向当前与框架关联的状态栏的指针(如果有)。

返回用于显示菜单和工具栏帮助的状态栏窗格。

返回指向当前与框架关联的工具栏的指针(如果有)。

默认构造函数。

构造函数,创建窗口。

模拟菜单命令。

此函数向窗口发送一个虚拟 wxSizeEvent,允许它重新布局其子项的位置。

告知框架显示给定的菜单栏。

将状态栏与框架关联。

设置用于显示菜单和工具栏帮助的状态栏窗格。

设置状态栏文本并更新状态栏显示。

设置状态栏中字段的宽度。

将工具栏与框架关联。

类型

-type wxFrame() :: wx:wx_object().

函数

链接到此函数

create(This, Parent, Id, Title)

查看源代码
-spec create(This, Parent, Id, Title) -> boolean()
                when
                    This :: wxFrame(),
                    Parent :: wxWindow:wxWindow(),
                    Id :: integer(),
                    Title :: unicode:chardata().

等效于 create(This, Parent, Id, Title, [])

-spec create(This, Parent, Id, Title, [Option]) -> boolean()
                when
                    This :: wxFrame(),
                    Parent :: wxWindow:wxWindow(),
                    Id :: integer(),
                    Title :: unicode:chardata(),
                    Option ::
                        {pos, {X :: integer(), Y :: integer()}} |
                        {size, {W :: integer(), H :: integer()}} |
                        {style, integer()}.

用于两步框架构造。

有关更多详细信息,请参阅 new/4

-spec createStatusBar(This) -> wxStatusBar:wxStatusBar() when This :: wxFrame().

等效于 createStatusBar(This, [])

-spec createStatusBar(This, [Option]) -> wxStatusBar:wxStatusBar()
                         when
                             This :: wxFrame(),
                             Option :: {number, integer()} | {style, integer()} | {id, integer()}.

在框架底部创建状态栏。

返回:如果成功创建状态栏,则返回指向状态栏的指针,否则返回 NULL。

注意:状态栏的宽度是框架的整个宽度(在调整大小时自动调整),并且高度和文本大小由宿主窗口系统选择。

参见

-spec createToolBar(This) -> wxToolBar:wxToolBar() when This :: wxFrame().

等效于 createToolBar(This, [])

-spec createToolBar(This, [Option]) -> wxToolBar:wxToolBar()
                       when This :: wxFrame(), Option :: {style, integer()} | {id, integer()}.

在框架的顶部或左侧创建工具栏。

返回:如果成功创建工具栏,则返回指向工具栏的指针,否则返回 NULL。

注意:默认情况下,工具栏是 wxToolBar 的一个实例。要使用不同的类,请重写 OnCreateToolBar()(在 wx 中未实现)。当使用此函数创建工具栏或通过 setToolBar/2 使框架知道工具栏时,框架将管理工具栏的位置并调整 wxWindow:getClientSize/1 的返回值,以反映应用程序窗口的可用空间。在 Pocket PC 下,您应始终使用此函数创建由框架管理的工具栏,以便 wxWidgets 可以使用组合的菜单栏和工具栏。在您管理自己的工具栏时,像往常一样创建 wxToolBar

参见

-spec destroy(This :: wxFrame()) -> ok.

销毁对象

链接到此函数

getClientAreaOrigin(This)

查看源代码
-spec getClientAreaOrigin(This) -> {X :: integer(), Y :: integer()} when This :: wxFrame().

返回框架客户区的原点(以客户坐标表示)。

如果框架具有工具栏,则它可能与 (0, 0) 不同。

-spec getMenuBar(This) -> wxMenuBar:wxMenuBar() when This :: wxFrame().

返回指向当前与框架关联的菜单栏的指针(如果有)。

参见

-spec getStatusBar(This) -> wxStatusBar:wxStatusBar() when This :: wxFrame().

返回指向当前与框架关联的状态栏的指针(如果有)。

参见

链接到此函数

getStatusBarPane(This)

查看源代码
-spec getStatusBarPane(This) -> integer() when This :: wxFrame().

返回用于显示菜单和工具栏帮助的状态栏窗格。

参见: setStatusBarPane/2

-spec getToolBar(This) -> wxToolBar:wxToolBar() when This :: wxFrame().

返回指向当前与框架关联的工具栏的指针(如果有)。

参见

-spec new() -> wxFrame().

默认构造函数。

链接到此函数

new(Parent, Id, Title)

查看源代码
-spec new(Parent, Id, Title) -> wxFrame()
             when Parent :: wxWindow:wxWindow(), Id :: integer(), Title :: unicode:chardata().

等效于 new(Parent, Id, Title, [])

-spec new(Parent, Id, Title, [Option]) -> wxFrame()
             when
                 Parent :: wxWindow:wxWindow(),
                 Id :: integer(),
                 Title :: unicode:chardata(),
                 Option ::
                     {pos, {X :: integer(), Y :: integer()}} |
                     {size, {W :: integer(), H :: integer()}} |
                     {style, integer()}.

构造函数,创建窗口。

注意:对于 Motif,应运行 MWM(Motif 窗口管理器)以使任何窗口样式都有效(否则所有样式都会生效)。

参见: create/5

链接到此函数

processCommand(This, Id)

查看源代码
-spec processCommand(This, Id) -> boolean() when This :: wxFrame(), Id :: integer().

模拟菜单命令。

-spec sendSizeEvent(This) -> ok when This :: wxFrame().

等效于 sendSizeEvent(This, [])

-spec sendSizeEvent(This, [Option]) -> ok when This :: wxFrame(), Option :: {flags, integer()}.

此函数向窗口发送一个虚拟 wxSizeEvent,允许它重新布局其子项的位置。

在框架创建后添加或删除子项之后,或者如果子项大小发生更改,则调用此函数有时很有用。请注意,如果框架正在使用尺寸器或约束进行子项布局,则只需直接调用 wxWindow:layout/1,并且在这种情况下不应使用此函数。

如果 flags 包含 wxSEND_EVENT_POST 值,则此函数会发布事件,即安排它稍后处理,而不是直接调度它。您还可以使用 PostSizeEvent()(在 wx 中未实现)作为调用此函数并带有此标志的更具可读性的等效项。

链接到此函数

setMenuBar(This, MenuBar)

查看源代码
-spec setMenuBar(This, MenuBar) -> ok when This :: wxFrame(), MenuBar :: wxMenuBar:wxMenuBar().

告知框架显示给定的菜单栏。

备注:如果框架被销毁,菜单栏及其菜单也会被销毁,因此请勿显式删除菜单栏(除非通过将框架的菜单栏重置为另一个框架或 NULL)。在 Windows 下,会生成一个尺寸事件,因此请务必在调用 setMenuBar/2 之前正确初始化数据成员。请注意,在某些平台上,不能对同一框架对象调用此函数两次。

参见

链接到此函数

setStatusBar(This, StatusBar)

查看源代码
-spec setStatusBar(This, StatusBar) -> ok when This :: wxFrame(), StatusBar :: wxStatusBar:wxStatusBar().

将状态栏与框架关联。

如果 statusBar 为 NULL,则状态栏(如果存在)将从框架中分离,但 不会 被删除。

参见

链接到此函数

setStatusBarPane(This, N)

查看源代码
-spec setStatusBarPane(This, N) -> ok when This :: wxFrame(), N :: integer().

设置用于显示菜单和工具栏帮助的状态栏窗格。

使用 -1 将禁用帮助显示。

链接到此函数

setStatusText(This, Text)

查看源代码
-spec setStatusText(This, Text) -> ok when This :: wxFrame(), Text :: unicode:chardata().

等效于 setStatusText(This, Text, [])

-spec setStatusText(This, Text, [Option]) -> ok
                       when This :: wxFrame(), Text :: unicode:chardata(), Option :: {number, integer()}.

设置状态栏文本并更新状态栏显示。

这是 wxStatusBar:setStatusText/3 的一个简单包装器,如果框架没有状态栏,即 getStatusBar/1 返回 NULL,则它不会执行任何操作。

备注:使用空字符串清除状态栏。

参见

链接到此函数

setStatusWidths(This, Widths_field)

查看源代码
-spec setStatusWidths(This, Widths_field) -> ok when This :: wxFrame(), Widths_field :: [integer()].

设置状态栏中字段的宽度。

备注:可变字段的宽度是通过所有字段的总宽度减去不可变字段的宽度总和,再除以可变字段的数量计算得出的。

链接到此函数

setToolBar(This, ToolBar)

查看源代码
-spec setToolBar(This, ToolBar) -> ok when This :: wxFrame(), ToolBar :: wxToolBar:wxToolBar().

将工具栏与框架关联。