-
关闭对话框的方法
2013-06-17 12:29:11参考网上资料,对话框关闭流程如下: 从用户单击关闭按钮(标题栏最右边)或者用鼠标或键盘选择系统菜单的“关闭”选项,直到窗口消失,应用程序结束。这期间到底发生了什么呢? 1、首先会产生一个WM_...参考网上资料,对话框关闭流程如下:
从用户单击关闭按钮(标题栏最右边)或者用鼠标或键盘选择系统菜单的“关闭”选项,直到窗口消失,应用程序结束。这期间到底发生了什么呢?
1、首先会产生一个WM_SYSCOMMAND消息,如果程序员没有对此消息进行拦截,则由缺省的窗口函数DefWindowProc进行处理,如果表达式(LOWORD(wParam)&0xFFF0)==SC_CLOSE 成立,DefWindowProc发出一个WM_CLOSE消息。
2、同样,如果程序员没有对WM_CLOSE消息进行拦截,则还是由DefWindowProc进行处理,这次,她只简单的调用DestroyWindow函数,DestroyWindow先把窗口破坏掉,使用户看不到窗口。但是窗口破坏后,应用程序并没有结束,于是DestroyWindow再接再励,送出了一个WM_DESTROY消息。
3、这一次,WM_DESTROY被载获了,通常是会有这样的句子:
case WM_DESTROY:
PostQuitMessage(0);
...
这里PostQuitMessage函数很简单的发送一个WM_QUIT消息来响应WM_DESTROY
4、WM_QUIT消息非常特殊,她使GetMessage函数返回0,从而结束了消息循环,
应用程序从此结束。关于关闭对话框,统计几种关闭方法:
- 向主窗口发送WM_CLOSE消息,使得主窗口调用OnClose函数销毁
- 直接调用CDialog:OnOK()函数
-
Android实现点击AlertDialog上按钮时不关闭对话框的方法
2020-09-03 22:50:17主要介绍了Android实现点击AlertDialog上按钮时不关闭对话框的方法,涉及设置监听的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下 -
MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法
2017-08-17 16:48:49屏蔽ESC和ENTER键关闭对话框的方法 转自:http://blog.csdn.net/xgx198831/article/details/6713651 MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法 或许还有其它更好的办法,但下面这个肯定有用,...转自:http://blog.csdn.net/xgx198831/article/details/6713651
MFC对话框程序 屏蔽ESC和ENTER键关闭对话框的方法
或许还有其它更好的办法,但下面这个肯定有用,主要就是重载PreTranslateMessage()函数,在这个函数里捕捉ESC和ENTER键按下时的消息,然后什么都不做,或是添加代码完成你自己想要实现的功能。
1.完全屏蔽ESC键与ENTER回车键
BOOL CTest1Dlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN)
return TRUE;
if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
2.完全屏蔽ESC键,捕捉ENTER回车键
BOOL CTest1Dlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN )
{
if(GetFocus()->GetDlgCtrlID()==IDC_MSG_SEND)//按下回车,如果当前焦点是在自己期望的控件上
{
CTest1Dlg::OnBnClickedBtnSend();//添加自己的处理代码
}
return TRUE;
}
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
该代码在VC中的MFC程序测试通过,完全可以实现,红色的代码是可以根据自己的实际情况修改的。=========================================
esc和enter键在一般人的使用中会认为是取消或者确认当前输入的意思,并且认为焦点会后移(tab键),但是windows的mfc对应的是dialog的onok和oncancel函数会关闭当前窗体,所以一般就是取消作用。一切以鼠标为主,键盘只是输入的数据和字符。
-
MFC中防止Enter和ESC关闭对话框的方法
2016-07-07 14:49:37在对话框有焦点的情况下,按Enter会自动触发每个对话框自带的默认“确定“按钮,从而触发消息促使系统去调用OnOK()函数,关闭对话框窗口。 所以我们需要将OnOK()函数复写,使它什么也不做就行了。 2.按ESC为...测试环境:Win7_64bit + VS2013
原因分析:
1.按Enter为什么会关闭窗口?
在对话框有焦点的情况下,按Enter会自动触发每个对话框自带的默认“确定“按钮,从而触发消息促使系统去调用OnOK()函数,关闭对话框窗口。
所以我们需要将OnOK()函数复写,使它什么也不做就行了。
2.按ESC为什么会关闭窗口?
在对话框有焦点的情况下,按ESC会自动触发每个对话框自带的默认“取消“按钮,从而促使系统去调用OnCancel()函数,关闭对话框窗口。
那么我们将OnCancel()函数复写,使它什么也不做就行了。
但是这样有个问题,就是现在如果我们点击右上角的关闭窗口按钮,这会触发WM_CLOSE消息,而这个消息最终也会调用OnCancel()来关闭窗口,当我们复写了OnCancel()后,会发现点关闭按钮也没法关闭窗口了。
所以我们继续复写WM_CLOSE消息响应函数OnClose(),让其直接调用父类的OnCancel()方法来关闭对话框,而不是使用我们复写的OnCancel()。
实际操作:
第一步,进入类向导,选中目标对话框对应的CXXXDlg类名。
第二步,选择“消息”选项卡,复写WM_CLOSE消息响应函数。
第三步,选择“虚函数”选项卡,复写OnCancel和OnOk两个函数。
修改内容如下:
void CXXXDlg::OnClose() { CDialogEx::OnCancel(); } void CXXXDlg::OnOK() {} void CXXXDlg::OnCancel() {}
现在在对话框得到焦点的情况下,按ESC或者Enter都不会将对话框窗口关闭了,而点击关闭窗口按钮可以正常的关闭。 -
完美实现Javascript关闭窗口不提示关闭对话框的方法
2013-01-23 15:58:33今天在搞支付宝快捷登录的时候,因为需要保留原页面的数据,因此不能使用跳转返回的方式,就尝试采用弹出新窗口的方式,那么最后支付宝验证成功返回后,...// 不提示窗口关闭对话框 parent.window.opener = null; paren今天在搞支付宝快捷登录的时候,因为需要保留原页面的数据,因此不能使用跳转返回的方式,就尝试采用弹出新窗口的方式,那么最后支付宝验证成功返回后,需要自动关闭新打开的窗口。
我们知道直接使用window.close()是会出现关闭提示的,这个用户体验就打折扣了,于是找到了完美关闭的方法,代码如下:
// 不提示窗口关闭对话框 parent.window.opener = null; parent.window.open("", "_self"); parent.window.close(); parent.window.location.href = ""; window.close();
-
【Win32】通过多线程自动关闭对话框的方法
2020-07-28 10:11:57希望在Windows开机后自动弹出个对话框提示一下,过8秒后自动关闭 一、解决 1.建项目和源文件 在VC6.0中新建Win32项目 新建C++源文件 2.编写代码 基础结构 #include <windows.h> int WINAPI ... -
VC++ MFC 中防止Enter和ESC关闭对话框的方法
2020-02-15 15:08:41Visual C++ 使用MFC 生成的dialog工程默认情况下按Enter键或Esc键后会导致程序直接退出。 该现象并非Bug或问题,但是在日常开发过程中并不需要Dialog工程在...解决方法: 在CXXXDlg类中重载函数PreTranslateMessa... -
VS2010 MFC中屏蔽ESC和ENTER键关闭对话框的方法
2018-02-01 13:09:45VS2010 MFC中屏蔽ESC和ENTER键关闭对 话框的方法 重载PreTranslateMessage()函数,在此函数里捕捉ESC和ENTER键按下时的消息。 1.完全屏蔽ESC键与ENTER回车键 BOOL CLXTDlg::...
-
C++代码规范和Doxygen根据注释自动生成手册
-
项目管理工具与方法
-
flutter_form-源码
-
go开发工程师 需要掌握的知识点
-
使用OpenStack实现云计算和存储
-
欢迎使用markdown编辑器
-
Jsplumb从入门到实战
-
project_hangeul:프로젝트한글:요가요-源码
-
最新一键部署H5即时通讯带群聊可封装APP可任意二开.zip
-
position 几个属性的作用
-
upload-labs第四关 pass-04 htaccess绕过
-
Docker从入门到精通
-
用微服务spring cloud架构打造物联网云平台
-
mpu9250姿态解算
-
libFuzzer视频教程
-
python 那些我的bug系列:Unident dose not match any outer indentation level错误
-
MySQL 高可用工具 heartbeat 实战部署详解
-
Windows系统管理
-
r7 3700x和i7 10700f哪个好
-
PhoneGap应用开发对策:如何通过苹果审核?