查看源代码 wxDialog (wx v2.4.3)
对话框是一个带有标题栏,有时带有系统菜单的窗口,可以在屏幕上移动。
它可以包含控件和其他窗口,通常用于允许用户进行选择或回答问题。
对于低分辨率屏幕的计算机,对话框可以自动设置为可滚动:请参阅 overview_dialog_autoscrolling 以获取更多详细信息。
对话框通常包含一个允许关闭对话框的按钮,或者两个按钮,一个接受更改,另一个放弃更改(如果存在这样的按钮,则在用户按下“Esc”键时会自动激活)。默认情况下,具有标准 wxID_OK 和 wxID_CANCEL 标识符的按钮会按预期运行。从 wxWidgets 2.7 开始,还可以使用具有不同标识符的按钮,请参阅 setAffirmativeId/2
和 SetEscapeId()
(在 wx 中未实现)。
另请注意,应使用 createButtonSizer/2
来创建适合当前平台的按钮并正确放置(包括它们的顺序,这取决于平台)。
模态和非模态
对话框有两种类型:模态和非模态。模态对话框会阻塞程序流程和对其他窗口的用户输入,直到它被关闭,而非模态对话框的行为更像框架,即程序流程继续,并且仍然可以对其他窗口进行输入。要显示模态对话框,应使用 showModal/1
方法,而要以非模态方式显示对话框,只需像使用框架一样使用 show/2
。
请注意,模态对话框是在堆栈上而不是在堆上创建的极少数 wxWindow 派生对象之一。换句话说,虽然大多数窗口会像这样创建
您可以使用更简单的代码使用对话框来实现相同的结果
应用程序可以为对话框定义 wxCloseEvent
处理程序,以响应系统关闭事件。
样式
此类支持以下样式
wxCAPTION:在对话框上放置标题。
wxDEFAULT_DIALOG_STYLE:等效于 wxCAPTION、wxCLOSE_BOX 和 wxSYSTEM_MENU 的组合(最后一个在 Unix 下不使用)。
wxRESIZE_BORDER:在窗口周围显示可调整大小的框架。
wxSYSTEM_MENU:显示系统菜单。
wxCLOSE_BOX:在框架上显示关闭框。
wxMAXIMIZE_BOX:在对话框上显示最大化框。
wxMINIMIZE_BOX:在对话框上显示最小化框。
wxTHICK_FRAME:在窗口周围显示粗框架。
wxSTAY_ON_TOP:对话框始终位于所有其他窗口的顶部。
wxNO_3D:此样式已过时,不再执行任何操作,请勿在新代码中使用它。
wxDIALOG_NO_PARENT:默认情况下,使用 NULL 父窗口创建的对话框将被赋予
应用程序的顶层窗口
(在 wx 中未实现)作为父窗口。使用此样式可防止这种情况发生并创建孤立对话框。不建议将此用于模态对话框。wxDIALOG_EX_CONTEXTHELP:在 Windows 下,在标题上放置一个查询按钮。按下后,Windows 将进入上下文相关的帮助模式,如果用户单击应用程序窗口,wxWidgets 将发送
wxEVT_HELP
事件。请注意,这是一种扩展样式,必须通过在调用 Create 之前调用wxWindow:setExtraStyle/2
来设置(两步构造)。wxDIALOG_EX_METAL:在 macOS 上,具有此样式的框架将以金属外观显示。这是一种额外的样式。在 Unix 或 Linux 下,MWM(Motif 窗口管理器)或其他识别 MHM 提示的窗口管理器应正在运行,这些样式才能生效。
请参阅
此类派生自以下类,并且可以使用以下类的函数:
wxWidgets 文档: wxDialog
事件
此类发出的事件类型
摘要
函数
用于两步对话框构造。
使用标准按钮创建大小器。
销毁对象
结束模态对话框,传递一个值,该值将从 showModal/1
调用返回。
获取在此对话框中像标准 OK 按钮一样工作的按钮的标识符。
获取此窗口的返回代码。
如果对话框是模态的,则返回 true,否则返回 false。
默认构造函数。
构造函数。
设置要用作 OK 按钮的标识符。
设置此窗口的返回代码。
等效于 show(This, [])
。
隐藏或显示对话框。
显示应用程序模态对话框。
类型
-type wxDialog() :: wx:wx_object().
函数
-spec create(This, Parent, Id, Title) -> boolean() when This :: wxDialog(), Parent :: wxWindow:wxWindow(), Id :: integer(), Title :: unicode:chardata().
-spec create(This, Parent, Id, Title, [Option]) -> boolean() when This :: wxDialog(), Parent :: wxWindow:wxWindow(), Id :: integer(), Title :: unicode:chardata(), Option :: {pos, {X :: integer(), Y :: integer()}} | {size, {W :: integer(), H :: integer()}} | {style, integer()}.
用于两步对话框构造。
请参阅:new/4
-spec createButtonSizer(This, Flags) -> wxSizer:wxSizer() when This :: wxDialog(), Flags :: integer().
使用标准按钮创建大小器。
flags
是以下标志的位列表:wxOK、wxCANCEL、wxYES、wxNO、wxAPPLY、wxCLOSE、wxHELP、wxNO_DEFAULT。
大小器以适合平台的方式布局按钮。
此函数在大多数平台上内部使用 createStdDialogButtonSizer/2
,但对于带有硬件按钮(如智能手机)的平台,它根本不创建大小器,而是适当地设置硬件按钮并返回 NULL,因此请不要忘记在 使用之前测试返回值是否有效。
-spec createStdDialogButtonSizer(This, Flags) -> wxStdDialogButtonSizer:wxStdDialogButtonSizer() when This :: wxDialog(), Flags :: integer().
使用标准按钮创建 wxStdDialogButtonSizer
。
flags
是以下标志的位列表:wxOK、wxCANCEL、wxYES、wxNO、wxAPPLY、wxCLOSE、wxHELP、wxNO_DEFAULT。
大小器以适合平台的方式布局按钮。
-spec destroy(This :: wxDialog()) -> ok.
销毁对象
结束模态对话框,传递一个值,该值将从 showModal/1
调用返回。
请参阅
获取在此对话框中像标准 OK 按钮一样工作的按钮的标识符。
获取此窗口的返回代码。
备注:返回代码通常与模态对话框关联,其中 showModal/1
向应用程序返回一个代码。
请参阅
如果对话框是模态的,则返回 true,否则返回 false。
-spec new() -> wxDialog().
默认构造函数。
-spec new(Parent, Id, Title) -> wxDialog() when Parent :: wxWindow:wxWindow(), Id :: integer(), Title :: unicode:chardata().
-spec new(Parent, Id, Title, [Option]) -> wxDialog() when Parent :: wxWindow:wxWindow(), Id :: integer(), Title :: unicode:chardata(), Option :: {pos, {X :: integer(), Y :: integer()}} | {size, {W :: integer(), H :: integer()}} | {style, integer()}.
构造函数。
请参阅:create/5
设置要用作 OK 按钮的标识符。
当按下带有此标识符的按钮时,对话框将调用 wxWindow:validate/1
和 wxWindow:transferDataFromWindow/1
,如果它们都返回 true,则使用肯定 ID 返回代码关闭对话框。
此外,当用户在具有一个硬件 OK 按钮的设备上或在 PocketPC 标题栏中的特殊 OK 按钮上按下硬件 OK 按钮时,将生成具有此 ID 的事件。
默认情况下,肯定 ID 为 wxID_OK。
设置此窗口的返回代码。
返回代码通常与模态对话框关联,其中 showModal/1
向应用程序返回一个代码。函数 endModal/2
调用 setReturnCode/2
。
请参阅
等效于 show(This, [])
。
隐藏或显示对话框。
关闭模态对话框的首选方法是使用 endModal/2
。
显示应用程序模态对话框。
在对话框通过 endModal/2
关闭之前,程序流程不会返回。
请注意,可以为先前使用 show/2
显示的对话框调用 showModal/1
,这允许将现有的非模态对话框设为模态。但是,如果没有介入的 endModal/2
调用,则不能调用 showModal/1
两次。
请注意,此函数会创建一个临时事件循环,该循环优先于应用程序的主事件循环(请参阅 wxEventLoopBase
(在 wx 中未实现)),并且在对话框被关闭时销毁。这也会导致调用 wxApp::ProcessPendingEvents()
(在 wx 中未实现)。
返回:使用 setReturnCode/2
设置的值。
请参阅