MFC对话框中的OnCancel方法

Win10系统VS2019+Cmake+qhull_8.0.0环境配置 1 qhull 1.1 简要介绍 qhull是一个强大的计算几何库,可以用于计算高维的convex hull, Delaunay triangulation, Voronoi diagram等。 1.2 依赖库 qhull不依赖其他库。 1.3 源码包下载 qhull源码地址:github:https://github.com/qhull/qhull.git 2 Cmake构建项目 2.1 路径 源代码路径:D:/ThirdParty/qhull/qhull_8.0.0构建项目路径:D:/Thi. 阅读详情

MFC对话框中的OnCancel虚拟方法在如下三个时机被调用:

1、对话框按IDCANCEL按钮,直接通过CDialog的ON_COMMAND(IDCANCEL, &CDialog::OnCancel)的消息映射,触发对OnCancel的调用;
2、按ESC按键,在CDialog::PreTranslateMessage中,调用CWnd::PreTranslateInput,进而调用CWnd::IsDialogMessage,接下来调用Windows API ::IsDialogMessage。在::IsDialogMessage处理中,应该(无法查看Windows源码,根据调试跟踪推测)SendMessage WM_COMMAND,ID为IDCANCEL,直接调用OnCancel;
3、按对话框右上角“X”按钮,缺省的OnClose会调用CWnd::Default,继而调用CWnd::DefWindowProc,进一步调用::CallWindowProc(m_pfnSuper, m_hWnd, nMsg, wParam, lParam),推测CallWindowProc(无法查看Windows源码,根据调试跟踪推测)会投递(即PostMessage)一条WM_COMMAND消息,ID为IDCANCEL,从而触发OnCancel被调用。

补充:

对于1、IDCANCEL按钮的WM_COMMAND消息是子窗口(按钮)向父窗口发送消息(SendMessage),所以不经过CDialog::PreTranslateMessage,直接经过CDialog::OnCommand调用OnCancel;
对于2、由于是SendMessage,也不再次经过CDialog::PreTranslateMessage,直接经过CDialog::OnCommand调用OnCancel;
对于3、由于是投递的WM_COMMAND消息并且是顶级窗口的消息,会经过CWinApp::PreTranslateMessage,再流经CDialog::PreTranslateMessage,最后通过CDialog::OnCommand调用OnCancel。

实验表明:如果是普通的框架窗口,处理OnClose的缺省操作会调用DestroyWindow关闭窗口,对于对话框窗口,是投递WM_COMMAND,控件ID是IDCANCEL。

Spring Boot 与 Redisson 版本适配深度解析 Spring Boot 与 Redisson 的版本适配是一个动态演进的过程。开发者需要密切关注两者官方的版本更新日志,建立完善的版本验证机制。本文提供的适配方案基于当前最新技术状态(2024年1月),建议在实际生产环境中通过灰度发布策略验证版本兼容性。只有深入理解底层技术原理,才能在分布式系统的星辰大海中稳健航行。延伸阅读Spring Boot 官方迁移指南。 阅读详情

相关推荐

Ansys Lumerical 2023 R1.2新功能实战:薄膜铌酸锂调制器仿真全流程解析

本文详细解析了Ansys Lumerical 2023 R1.2在薄膜铌酸锂电光相位调制器仿真中的最新功能与应用。通过实战演示,展示了从电极配置、电场计算到模式分析的全流程,重点介绍了各向异性介电常数支持和多物理场耦合优化等关键技术,助力开发者高效设计高性能光通信器件。

weixin_28454475的博客 1207

关于OnOK()、OnCancel()、OnClose()、OnDestroy() 模式对话框

总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转) 2009年09月22日 下午 08:33 第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数。从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框中的“确定”、“取...

weixin_30735391的博客 828

【excel+vba】一表拆多表+不同收件人附带不同附件

快捷处理:拆分多个不同表 给不同人发送不同内容且附带附件

weixin_42779327的博客 2968

总结OnOK、OnCancel、OnDestroy函数之间的区别

第一,OnOk()和OnCancel()是CDialog基类的成员函数,而OnColse()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数 第二,OnClose()和OnDestroy() 在对话框程序中,根据《深入浅出MFC》所讲,程序退出执行时执行的操作顺序为(从点X按钮开始) (1)用户点击X关闭按钮,发送了WM_CLOSE消息----------->响应OnCl

程序道 -Learning, Thinking and Coding <存储知识的金库> 1556

从隐式求解器到显式求解器:COMSOL接触仿真中的求解策略对比与选择

本文深度解析了COMSOL中隐式与显式求解器在接触仿真中的应用与选择策略。针对非线性接触问题的核心挑战,详细对比了两种求解器的数学框架、优化技术及适用场景,并提供了参数调优和调试技巧,帮助工程师高效解决接触仿真中的收敛问题。

weixin_28347369的博客 682

腾讯云运维工程师认证TCA--真题(最新2022.11)

解析:云原生应用的12要素,1.基准代码:一份基准代码,多份部署;解析:腾讯云主账号具备对其名下资源(包括存储桶)的最大权限,您虽然可以在存储桶策略中限制几乎所有操作,但主账号始终具备 PUT Bucket Policy 操作的权限,主账号调用该操作不检查存储桶策略。解析:瀑布模型将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。解答:云原生五大关键技术:微服务、容器化、DevOps、持续交付。

e1210101的博客 9915

总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别

第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数。从应用程序结构的角度,拿对话框来说,红色的X对应的是CWnd,而处于对话框中的“确定”、“取消”按钮则对应了CDialog。第二,OnClose()和OnDestroy()在单视图程序中,根据>所讲,程序退出时执行的操作顺序为(从

wind1987321的专栏 1万+

STM32 Proteu直流电机正反转控制系统限位开关-0035

硬件组成:STM32F103C6单片机 +L298N电机控制电路+直流电机+3个按键(正转、反转、停止)+LED指示灯(正转、反转、停止)+限位开关(正限位 反限位) 1.通过3个按键(正转、反转、停止)控制电机的正转、反转、停止。 2.有3个LED指示灯,正转时正转指示灯亮。反转停止对应反转停止指示灯亮。 3.有自动正转反转停止功能,正转时当正限位按键按下时说明正转到最大距离。此时自动停止。反转一样。

zhaxiaobian_er的博客 2002

OnOK()与OnCancel()

首先OnOK是对ID_OK的响应, OnCancel是对IDCANCEL的响应. 前者对应键盘的Enter, 后者对应Esc. MFC: 1、Called when the user clicks the OK button (the button with an ID of IDOK). 2、The framework calls this member function when

小米的修行之路 1万+

Python无法拒绝的表白界面(完整代码)

Python制作一个无法拒绝的表白界面的完整代码。

AIGC 5万+

SSH 远程登录报错:kex_exchange_identification: Connection closed.....

不知道为啥会出现这样的情形,最近这段时间登录都是正常的,不知道哪里抽风了,就提示这个。错误信息 kex_exchange_identification: Connection closed by remote host 出现在尝试使用 SSH 连接到远程服务器过程中,表明在密钥交换阶段的一开始,远程主机就关闭了连接。服务器的sshd_config文件中配置错误,可能是不允许的加密算法、修订文件中的语法错误,或者未正确指定用于SSH的HostKey。如果当前已有太多活动连接,新的连接尝试可能会被拒绝。

飞越蓝天的专栏 8297

重载OnOK、OnCancle、OnClose

MFC默认建立的Dialog按Esc响应OnCancel,回车响应OnOK,都会关闭对话框,只要重载OnOk和OnCancel函数即可,但此时点击关闭按钮无法关闭窗口,还需要再重载OnClose函数。代码如下: void CMFCDemoDlg::OnBnClickedOk(){// TODO: Add your control notification handler code h...

bankelei6741的博客 449

YOLOv8改进 | Neck篇 | Slim-Neck替换特征融合层实现超级涨点 (又轻量又超级涨点)

本文给大家带来的改进机制是Slim-neck提出的Neck部分,Slim-neck是一种设计用于优化卷积神经网络中neck部分的结构。在我们YOLOv8中,neck是连接主干网络(backbone)和头部网络(head)的部分,负责特征融合和处理,以便提高检测的准确性和效率。亲测在小目标检测和大尺度目标检测的数据集上都有大幅度的涨点效果(mAP直接涨了大概有0.4左右。同时本文对Slim-Neck的框架原理进行了详细的分析,不光让大家会添加到自己的模型在写论文的时候也能够有一定的参照。

Snu77的博客 1万+

MFC中解决回车和ESC关闭的问题,重载OnOk(),OnCancel()函数的正确做法

本文参考了如下文章: http://msdn.microsoft.com/en-us/library/66b3y2ab(VS.71).aspx http://topic.youkuaiyun.com/u/20100918/16/5a8bb22b-80bc-4e9f-8392-a3f876e91e05.html http://blog.youkuaiyun.com/zdl1016/article/details/27...

u011555996的博客 1133

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MFC对话框Enter键、Esc键、关闭按钮的消息处理

在MFC对话框中,经常会碰到按Enter或Esc键,对话框会被关闭的现象。 Enter键的处理流程如下: 1.如果对话框有按钮拥有焦点响应该按钮的单击事件 ,如果按钮ID为IDOK,并且没有事件响应函数,则执行函数OnOK() 2.否则执行函数OnOK()Esc键的处理流程: 1.执行OnCancel()关闭按钮的处理流程: 1.找到消息(WM_CLOSE)的响应函数则执行 2.否则执行OnC...

hill_guo的博客 1614

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【转】关闭对话框,OnClose和OnCancel MFC中屏蔽ESC和回车关闭对话框

【转】关闭对话框,OnClose和OnCancel MFC中屏蔽ESC和回车关闭对话框      我们知道,在对话框中,屏蔽ESC键自动退出可以选择重载OnCancel为哑函数的方法:      void CXXXXDlg::OnCancel()      {         // TODO: Add your specialized code here and/or ca

CDkey 2619

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

dialog对话框初始化 mfc_MFC Dialog使用

1.OnInitDialog 对话框初始化函数在MFC主对话框OnInitDialog()中弹出对话框BOOL CXXXDlg::OnInitDialog(){CDialogEx::OnInitDialog();SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);CChildDlg dlg;dlg.DoModal();//你的业务代码}在MFC中新建基于...

weixin_36150355的博客 1834

[MFC]CDialog类简介、创建模态对话框

1. CDialog类的基本使用方法:      1) 在创建自己的对话框之前必须先从CDialog类派生出自己的类,并在派生类中定义一些自己的数据域以及其它新的函数;      2) CDialog中继承来的最重要的三个函数都是消息响应函数:OnInitDialog、OnOK、OnCancel函数           i. OnInitDialog相应的WM_INITDIALOG消息,该函

Lirx_Tech的专栏 5056

CDialog类中OnCancel()、OnInitDialog()作用

1.void CCOMDDlg::OnCancel() { // TODO: Add extra cleanup here CDialog::OnCancel();} 如果把CDialog::OnCancel();注释掉,那么点击按钮ESC或者鼠标点击X将无法关闭整个窗口。 2.BOOLCTestDlg::OnInitDialog(){CDialog::OnInitDialog();}表示...

weixin_30892987的博客 561

关闭对话框,OnClose和OnCancel

我们知道,在对话框中,屏蔽ESC键自己主动退出能够选择重载OnCancel为哑函数的方法: void CXXXXDlg::OnCancel() { // TODO: Add your specialized code here and/or call the base class //CDialog::OnC...

weixin_30343157的博客 576

mfc 子窗体 按钮不触发_实战经验:MFC非模态对话框的使用

问题在MFC编程中,我们经常会使用到模态对话框,模态对话框的一个典型特征是当对话框弹出后,其父窗口将不接受任何UI响应,直到关闭当前的模态对话框后才能继续。然而,非模态对话框就没有这个限制,今天我们就来讲讲如何在MFC中使用非模态对话框。Step by step1) 在VS的资源管理器中新建一个对话框资源。2) 为这个对话框新建对话框类,这里将对话框类命名为CTestDlg。3) 对话框资源及对话...

weixin_39998521的博客 853

MFC 模态对话框dlg.DoModal()返回值(转)

查了很多资料,都说DoModal()返回值为OK或CANCEL键的ID   其实,这种说法是错误的   MSDN是这样说明其返回值的         If successful, the value of the nRetCode parameter specified in t

2382

MFC非模态对话框的销毁

S的指示:非模态对话框需要重载函数OnCanel,并且在这个函数中调用DestroyWindow。并且不能调用基类的OnCancel,因为基类的OnCancel调用了EndDialog这个函数,这个函数是针对模态对话框的。 还有一个必须重载的函数就是PostNcDestroy,这也是一个虚函数,通常的非模态对话框是用类的指针,通过new创建的,这就需要在PostNcDestroy函数中delet

chzuping的专栏 1468

深入理解OnOK与OnCancel

这几天调一个程序时,遇到一个和OnOK, OnCancel有关的bug, 于是整理一下写了下面这篇文章。 首先OnOK是对ID_OK的响应, OnCancel是对IDCANCEL的响应. 前者对应键盘的Enter, 后者对应Esc.   两个函数都是CDialog类的virtual的成员函数, 也就是MFC是希望你去重载它们. 两个函数有一个共同点,就是都会调用EndDialog. 

Qsir的专栏 1275

MFC中对话框关闭,进程残留

MFC中对话框关闭后,进程仍然残留的简便解决方法 ##调用cmd指令或者用destroy方法 1.在头文件中添加oncancel处理 afx_msg void OnBnClickedCancel(); 2.主文件中加入事件处理方法即可,这里调用taskkill方法,sql_test.exe修改为你的进程名字即可 void login_dlg::OnBnClickedCancel() { Win...

killsoiler的博客 1070

关于非模态对话框的销毁(转)

MS的指示:非模态对话框需要重载函数OnCanel,并且在这个函数中调用DestroyWindow。并且不能调用基类的OnCancel,因为基类的OnCancel调用了EndDialog这个函数,这个函数是针对模态对话框的。还有一个必须重载的函数就是PostNcDestroy,这也是一个虚函数,通常的非模态对话框是用类的指针,通过new创建的,这就需要在PostNcDestroy函数中delete

midie的专栏 810
上一篇: Window 命令提示符不支持UTF-16代码页
下一篇: 指向C++类虚成员函数指针的释疑
二进制脑袋
博客等级 码龄25年 25粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值