C++GUI之wxWidgets(4)-编写应用涉及的类和方法(2)-wxDialog,wxCloseEvent

news2024/12/23 2:39:28

目录

    • wxDialog
      • 包含
      • 类继承
      • 具体描述
      • 模态和无模态
      • 支持样式
      • 此类发出的事件
      • wxWindow::Close()
    • wxCloseEvent
      • 具体描述
      • 使用此类的事件

wxDialog

包含

#include <wx/dialog.h>

类继承

描述主在这里插入图片描述

具体描述

对话框是一个带有标题栏的窗口,有时还有一个系统菜单,可以在屏幕上移动。

它可以包含控件和其他窗口,通常用于允许用户做出选择或回答问题。

对于具有低分辨率屏幕的计算机,对话框可以自动滚动。

对话框通常包含一个允许关闭对话框的按钮或两个按钮,一个接受更改,另一个放弃更改(如果存在此按钮,则当用户按下“Esc”键时会自动激活)。默认情况下,具有标准wxID_OK和wxID_CANCEL标识符的按钮的行为符合预期。从wxWidgets 2.7开始,也可以使用具有不同标识符的按钮,请参见SetAffirmativeId()和SetEscapeId()。

还要注意,CreateButtonSizer()应该用于创建适合当前平台的按钮,并正确定位(包括它们的顺序,这取决于平台)。

模态和无模态

有两种对话框,模态和非模态。
模态对话框会阻止其他窗口上的程序流和用户输入,直到它被关闭,而非模态对话框的行为更像是程序流中的一个框架,而其他窗口中的输入仍然是可能的。要显示模式对话框,应该使用ShowModal()方法,而要非模式显示对话框,只需使用show(),就像使用框架一样。

注意,模态对话框是wxWindow派生对象的少数示例之一,这些对象可以在堆栈上创建,而不是在堆上创建。换句话说,虽然大多数窗口都是这样创建的:

void AskUser()
{
    MyAskDialog *dlg = new MyAskDialog(...);
    if ( dlg->ShowModal() == wxID_OK )
        // ...
    //else: dialog was cancelled or some another button pressed
 
    dlg->Destroy();
}

通过使用更简单的代码,您可以使用对话框获得相同的结果:

void AskUser()
{
    MyAskDialog dlg(...);
    if ( dlg.ShowModal() == wxID_OK )
        // ...
 
    // no need to call Destroy() here
}

支持样式

wxCAPTION:

在对话框上放置标题。

wxDEFAULT_DIALOG_STYLE:

相当于wxCAPTION、wxCLOSE_BOX和wxSYSTEM_MENU的组合(最后一个在Unix下不使用)。

wxRESIZE_ORDER(大小排序):

在窗口周围显示可调整大小的框架。

wxSYSTEM_菜单:

显示系统菜单。

wxCLOSE_BOX:

在框架上显示关闭框。

wx最大值箱:

在对话框上显示最大化框。
使用此类的事件

最小尺寸箱:

在对话框上显示最小化框。

wx厚度框架:

在窗口周围显示一个粗框。

wxSTAY_ON_TOP:

该对话框位于所有其他窗口的顶部。

wxNO_3D:

这种样式已经过时,不再做任何事情,不要在任何新代码中使用它。

wxDIALOG_NO_PARENT:

默认情况下,使用NULL父窗口创建的对话框将被赋予应用程序的顶级窗口作为父窗口。使用此样式可防止发生这种情况,并创建孤立对话框。这不建议用于模式对话框。

wxDIALOG_EX_CONTEXTHELP:

在Windows下,在标题上放置一个查询按钮。按下时,Windows将进入上下文相关帮助模式,如果用户单击应用程序窗口,wxWidgets将发送wxEVT_help事件。请注意,这是一种扩展样式,必须在调用Create(两步构造)之前通过调用SetExtraStyle()进行设置。

wxDIALOG_EX_金属:

在macOS上,这种风格的框架将以金属外观显示。这是一种额外的风格。

在Unix或Linux下,MWM(Motif窗口管理器)或其他识别MHM提示的窗口管理器应该运行,以使这些样式中的任何一种都能产生效果。

此类发出的事件

以下事件处理程序宏将事件重定向到具有如下原型的成员函数处理程序“func”:

void handlerFuncName(wxCloseEvent& event)

此类发出的事件的事件宏:

EVT_CLOSE(函数):

对话框正在由用户或以编程方式关闭(参阅wxWindow::Close)。如果存在关闭按钮(通常是标题栏右上角的“X”),用户可以通过单击该按钮生成此事件(请参见wxCLOSE_BOX样式)。

EVT_INIT_DIALOG(函数):

处理wxEVT_INIT_DIALOG事件。

wxInitDialogEvent在初始化对话框或面板时发送。

此事件的处理程序可以将数据传输到窗口。

默认处理程序调用wxWindow::TransferDataToWindow。

使用此类的事件

以下事件处理程序宏将事件重定向到具有如下原型的成员函数处理程序“func”:

void handlerFuncName(wxInitDialogEvent&event)

事件宏:

EVT_INIT_DIALOG(函数):

处理wxEVT_INIT_DIALOG事件。

wxWindow::Close()

bool wxWindow::Close ( bool force = false )

此函数只生成一个wxCloseEvent,其处理程序通常尝试关闭窗口。

然而,它不会关闭窗口本身。

参数

如果窗口的关闭处理程序应该能够否决对该窗口的破坏,则强制为false;如果不能否决,则为true。

返回

如果事件已处理且未被否决,则为true,否则为false。

Close调用窗口的关闭处理程序,为窗口提供选择是否销毁窗口的机会。通常,它只用于顶层窗口(wxFrame和wxDialog类),因为其他窗口不应该有任何特殊的OnClose()逻辑。
关闭处理程序应该使用wxCloseEvent::CanVeto检查窗口是否被强制删除,在这种情况下,它应该使用wxWindow::destroy销毁窗口。
请注意,调用Close并不保证该窗口将被销毁;但它提供了一种模拟手动关闭窗口的方法,这可以通过破坏窗口来实现,也可以不实现。
wxDialog::OnCloseWindow的默认实现不一定会删除该对话框,因为它只会模拟一个wxID_CANCEL事件,该事件由适当的按钮事件处理程序处理,可以执行任何操作。要确保窗口将被销毁,请改为调用wxWindow::Destroy

应用程序可以为对话框定义wxCloseEvent处理程序,以响应系统关闭事件。

wxCloseEvent

具体描述

此事件类包含有关窗口和会话关闭事件的信息。

当用户尝试使用窗口管理器(X)或系统菜单(Windows)关闭框架或对话框时,将调用EVT_CLOSE的处理程序函数。它也可以由应用程序本身以编程方式调用,例如通过调用wxWindow::Close函数。

您应该使用wxCloseEvent::CanVeto检查应用程序是否强制删除窗口。如果为false,则必须使用wxWindow::destroy销毁窗口。

如果返回值为真,则取决于您是否通过销毁窗口进行响应。

如果不销毁该窗口,则应调用wxCloseEvent::Veto,让调用代码知道您没有销毁该窗口。这允许wxWindow::Close函数返回true或false,具体取决于关闭指令是否得到执行。

void MyFrame::OnClose(wxCloseEvent& event)
{
    if ( event.CanVeto() && m_bFileNotSaved )
    {
        if ( wxMessageBox("The file has not been saved... continue closing?",
                          "Please confirm",
                          wxICON_QUESTION | wxYES_NO) != wxYES )
        {
            event.Veto();
            return;
        }
    }
 
    Destroy();  // you may also do:  event.Skip();
                // since the default event handler does call Destroy(), too
}

EVT_END_SESSION事件略有不同,因为它是在用户会话结束时(例如,由于注销或关闭)由系统发送的,因此所有窗口都被强制关闭。
至少在MSW下,在执行该事件的处理程序后,程序被系统简单地终止。因此,wxWidgets提供的此事件的默认处理程序调用所有常用的清理代码(包括wxApp::OnExit()),以便它仍然可以执行,exit()将进程本身退出,而无需等待被终止。如果由于某种原因不希望出现这种行为,请确保在wxApp派生类中为该事件定义了一个处理程序,并且不要在其中调用event.Skip()(但要注意,系统仍然会终止应用程序)。

使用此类的事件

以下事件处理程序宏将事件重定向到具有如下原型的成员函数处理程序“func”:

void handlerFuncName(wxCloseEvent事件)

事件宏:

EVT_CLOSE(函数):

处理wxEVT_CLOSE_WINDOW命令事件,提供成员函数。此事件适用于wxFrame和wxDialog类。

EVT_QUERY_END_SESSION(函数):

处理wxEVT_QUERY_END_SESSION会话事件,提供成员函数。此事件只能在wxApp派生类中处理。

EVT_END_SESSION(函数):

处理wxEVT_END_SESSION会话事件,提供成员函数。此事件只能在wxApp派生类中处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python-多线程、网络编程、正则表达式

目录 闭包 多线程 主线程 线程阻塞 同步锁 网络编程 正则表达式 re.match函数 re.search方法 re.match与re.search的区别 re.findall()方法 正则表达式的特殊规则 闭包 account0 def atm(num,flag):global accountif flag:accountnumaccountprint(account)else:acco…

免费开源的高精度OCR文本提取,支持 100 多种语言、自动文本定位和脚本检测,几行代码即可实现离线使用(附源码)

免费开源的高精度OCR文本提取,支持 100 多种语言、自动文本定位和脚本检测,几行代码即可实现离线使用(附源码)。 要从图像、照片中提取文本吗?是否刚刚拍了讲义的照片并想将其转换为文本?那么您将需要一个可以通过 OCR(光学字符识别)识别文本的应用程序。 图片文字识…

html圣诞树代码

一、前言 想做一个圣诞树&#xff0c;通过html实现了下 二、效果展示 三、代码 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <meta name"viewport" cont…

245. 你能回答这些问题吗——线段树

给定长度为 N 的数列 A&#xff0c;以及 M 条指令&#xff0c;每条指令可能是以下两种之一&#xff1a; 1 x y&#xff0c;查询区间 [x,y] 中的最大连续子段和&#xff0c; 2 x y&#xff0c;把 A[x] 改成 y。 对于每个查询指令&#xff0c;输出一个整数表示答案。 输入格式…

RabbitMQ 第二天 高级 9 RabbitMQ 集群搭建 9.3 集群管理 9.5 负载均衡-HAProxy

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第二天 高级9 RabbitMQ 集群搭建9.3 集群管理9.5 负载均衡-HAProxy9.5.1 安装HAProxy9.5.2 配置HAProxy第二天 高级 9 RabbitMQ 集群搭建 9.3 集群管理 rabbitmqctl join_cl…

MariaDB上市:MySQL之父奋斗13年终敲钟 要写代码写到100岁

雷递网 雷建平 12月24日云数据库公司MariaDB日前与特殊目的公司Angel Pond Holdings完成合并&#xff0c;并在纽交所上市&#xff0c;新公司更名为MariaDB。MariaDB是2022年初与Angel Pond Holdings达成合并协议&#xff0c;对新公司的作价为6.72亿美元。MariaDB是MySQL之父Mic…

【技术应用】java基于UNIX域套接字(unix domain socket)连接redis

【技术应用】java基于UNIX域套接字unix domain socket连接redis一、前言二、实现思路三、代码实现1、java socket基于redis.sock连接redis2、Lettuce框架基于redis.sock连接redis一、前言 在公司工作中经常涉及到一些中小型项目&#xff0c;这些项目都会涉及使用redis数据库&a…

Redis5.0+——持久化——RDBAOF

Redis持久化-RDB 1.实现目标&#xff1a; 在redis持久化时&#xff0c;持久化dump.rdb文件放入到redis解压目录下的data目录下的6379目录下 2.前期准备 1.在redis-5.0.3解压目录下新建data数据目录 2.编辑前面配置的/etc/redis.conf配置文件 修改持久化文件位置 (1) 进入安…

MySQL热备之PXB备份与恢复

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

【语音处理】使用块反射器的基于DFT的系统中用于旁瓣抑制的正交预编码(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Java中的多线程(下)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaEE 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 多线程案例 单例模式 饿汉模式 懒汉模式 阻塞式队列 为什么要引入阻塞队列 Java中的阻塞队列 模拟实现阻塞队列 定时器 标准库中的定时器 …

docker的虚悬镜像是什么?

虚悬镜像是什么? 答:仓库名、标签都是<none>的镜像,俗称:dangling image 我们使用Dockerfile写一个: 1:编写 from ubuntu CMD echo action is success2:构建 docker build . 注意没有 -t 产生原因: 1:构建时候因为编写错误导致 2:删除的时候 对于这样…

数据溢出的二进制原理

char 类型的数据占一个字节&#xff0c;一个字节有 8 位&#xff0c;最高位为符号位&#xff0c;1表示负数&#xff0c;0表示正数。在计算机中&#xff0c;数据用补码表示&#xff0c;正数的补码是它本身&#xff0c;负数的补码为 “符号位不变&#xff0c;其他位取反后再加1”…

Spring Cloud 系列之OpenFeign:(4)集成OpenFeign

目录 传送门 服务间调用 集成OpenFeign 说明文档 添加pom依赖 启用OpenFeign 声明OpenFeign接口 改造远程调用 定义OpenFeign接口 测试OpenFeign调用 传送门 Spring Cloud Alibaba系列之nacos&#xff1a;(1)安装 Spring Cloud Alibaba系列之nacos&#xff1a;(2)单…

离散数学数理逻辑部分【2】

文章目录命题逻辑等值演算公式的使用【重点】析取范式和合取范式【重点】范式存在定义【了解】求公式A的范式的步骤&#xff1a;【重点】极大项和极小项【重点】主合取范式和主析取范式【重点】等式演算求主析取范式【重点】真值表求主析取范式【了解】主范式的应用【重点】推理…

Python : 使用python实现教务管理系统(GUI界面+数据库)

一、设计目的 1.熟悉Python和相关软件的操作。 2.基于本学期所学Python知识&#xff0c;熟练应用掌握&#xff0c;制作符合要求的教务管理系统。 3.会对程序运行中的错误代码进行分析&#xff0c;找出合理的解决方案。 4.掌握tkinter开发流程&#xff0c;布局方法和主要组件&a…

C语言位域

如果程序的结构中包含多个开关量&#xff0c;只有 TRUE/FALSE 变量&#xff0c;如下&#xff1a; struct {unsigned int widthValidated;unsigned int heightValidated; } status; 这种结构需要 8 字节的内存空间&#xff0c;但在实际上&#xff0c;在每个变量中&#xff0c;…

JavaScript游戏开发(4)(笔记)

文章目录八、角色动作状态的管理8.1 准备部分8.2 角色状态改变的基本方式8.3 完善整个代码8.4 存在的问题九、简单的横板动作卷轴游戏9.1 准备部分9.2 输入管理器9.3 状态管理器9.4 背景管理器9.5 敌人管理器9.6 碰撞检测、UI绘制9.7 更多的角色状态与特效9.8 完善游戏附录素材…

跳槽、换房、不忘输出,与你分享我匆忙的 2022~

前些日子下班回家的瞬间&#xff0c;忽然想起去年春节还在跟老爸吐露职场的困境和对房子的无奈。哪曾想过了不到半年的时间竟全部解决&#xff0c;令我不禁感叹人生的捉摸不透。 让我姑且花点文字记录下&#xff0c;与你分享我这一年的匆匆忙忙&#xff5e; 目录前瞻&#xf…

Listener监听器 | 监听域对象创建和销毁、使用监听器统计网站在线人数

目录 一&#xff1a;监听域对象创建和销毁 1、什么是监听器&#xff1f;监听器有什么用&#xff1f; 2、Servlet规范中提供了哪些监听器&#xff1f; 3、实现一个监听器的步骤 4、HttpSessionBindingListener 5、HttpSessionIdListener & HttpSessionActivationList…