MFC之几类消息的区别
1.ON_COMMAND与ON_UPDATE_COMMAND_UI
开发MFC程序,给菜单子项添加消息处理函数时,会碰到ON_COMMAND和ON_UPDATE_COMMAND_UI两个消息。
ON_UPDATE_COMMAND_UI消息:在处理菜单对应的用户界面显示状态时,可响应此消息对应的处理函数,把菜单项
ON_COMMAND消息:是对命令消息(菜单、工具条、状态栏、加速键等)处理函数相对应的消息映射宏。
ON_UPDATE_COMMAND_UI则是映射用户操作界面(主要是菜单状态)的函数的宏。用于在用户下拉菜单时,确定菜单子项的状态,如选中、变灰、打勾等。
以Winodows自带的记事本为例,它的"格式"菜单下有个“自动换行”子项。对文本换行或不换行的操作放在ON_COMMAND消息响应函数里,而“自动换行”菜单项左侧是否打勾的操作则放在ON_UPDATE_COMMAND_UI里。
2.WM_CLOSE、WM_DESTROY、WM_QUIT区别
WM_CLOSE:关闭窗口或整个程序前产生
假设一个应用程序有多个窗口,关闭任意一个窗口,都会触发那个窗口的WM_CLOSE消息。
特别地,退出程序时,即选了系统菜单里关闭选项或点了程序右上角X,也会产生WM_CLOSE消息。在SDI或MDI程序中,由CMainFrame的ONCLOSE处理。注意,为了使应用程序处理此消息(特指通过右上角的X关闭程序),要把ON_WM_CLOSE()宏放入BEGIN_MESSAGE_MAP和END_MESSAGE_MAP()之间。另外一个要注意的地方是MFC窗口默认取消按钮函数OnCancel()不会触发WM_CLOSE消息,只触发WM_DESTROY。
WM_DESTROY:关闭窗口后产生,程序退出前产生。当收到WM_DESTROY消息的时候,窗口已经从视觉上被删除;但一个主窗口被关闭,并不意味着应用程序结束了,因为它可以在没有窗口的条件下继续运行。
WM_QUIT:关闭消息循环。如果希望关闭程序,在收到WM_DESTROY消息的时候,必须再发出一个WM_QUIT消息。
代码例子:
假设要实现一个菜单选项,关闭当前所有的窗口。实现思路就是遍历窗口句柄,然后向对应窗口发送WM_CLOSE消息。窗口只是被关闭了,但窗口消息循环仍在。
void CMainFrame::OnCloseAllWindows()
{
CMDIFrameWnd* pWnd = (CMDIFrameWnd*)AfxGetMainWnd();
ASSERT(pWnd != NULL);
HWND hChild = ::GetWindow(pWnd->m_hWndMDIClient, GW_CHILD);
CMDIChildWnd* pChild = (CMDIChildWnd*)CWnd::FromHandle(hChild);
while(pChild != NULL)
{
pChild->PostMessage(WM_CLOSE);
pChild = (CMDIChildWnd*)(pChild->GetNextWindow());
}
}
MFC之几类消息的区别的更多相关文章
- MFC 虚函数与消息映射区别
初学MFC添加函数时,总是纠结于是 Add windows message handler or Add virtual function 说到底不理解MFC中虚函数与消息处理函数的设计区别 本人理 ...
- MFC中 Invalidate() , InvalidateRect() , UpdateWindow(), Redrawwindow() 区别
1. void Invalidate( BOOL bErase = TRUE ); 该函数的作用是使整个窗口客户区无效.窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口 ...
- MFC OnOk(),OnCancel(),OnClose(),OnDestroy()的区别总结
MFC OnOk(),OnCancel(),OnClose(),OnDestroy()的区别总结(转) 第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和O ...
- Win32 Console Application、Win32 Application、MFC三者之间的联系和区别
转自:http://blog.csdn.net/c_base_jin/article/details/52304845 在windows编程中,我们或多或少都听说这三个名称,分别是Win32 Cons ...
- VC++、MFC、COM和ATL的区别
今天看到的,感觉不错.转载了 一.什么是MFC 微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是W ...
- <MFC_1>深入剖析MFC的WinMain和消息机制
一.开篇引论 熟悉Win32开发的朋友,应该非常了解它的基本组成和流程 1. WinMain:书写窗口类(WNDCLASS) -> 注册窗口类 -> 创建窗口 -> 显示窗口和更新窗 ...
- MFC自创建类了解
CxxxxView 视窗类 所有的按键 等消息都先在这里响应 CxxxxDoc 文档类 CMainFrame 框架类 CxxxxApp 应用程序类 CxxxxView类中的 OnDraw函数 在窗口改 ...
- Windows的四类消息
Windows的三类消息1.标准消息宏名称 对映消息 消息处理函数(名称已由系统预设)ON_WM_CHAR WM_CAHR OnCharON_WM_CLOSE WM_CLOSE OnCloseON_W ...
- MFC原理第五讲.消息映射.以及如何添加消息
MFC原理第五讲.消息映射.以及如何添加消息 一丶消息映射是什么 我们知道.Win32程序.都是通过消息去驱动的. 不断的在处理消息. 只要我们使用固定的宏.就可以让我们的框架知道一旦消息发生.该往哪 ...
随机推荐
- 如何给php数组添加元素
以参考下 本文较为详细的总结了php数组添加元素方法.分享给大家供大家参考.具体分析如下: 如果我们是一维数组增加数组元素我们可以使用ArrayListay_push,当然除这种方法之外我们还有更直接 ...
- 【Spring源码解析】—— 依赖注入结合SpringMVC Demo-xml配置理解
在IOC容器初始化的梳理之后,对依赖注入做一个总结,就是bean实例化的过程,bean的定义有两种方式,一种是xml文件配置,一种是注解,这里是对xml配置文件的依赖注入的介绍,后续对bean与该部分 ...
- 19-04【mysql】transaction,autocommit
本地使用mysql测试结果如下, 没有使用start transaction的情况下: 如果set autocommit=1,则每一条语句默认提交: 如果set autocommit=0,则这条语句默 ...
- php中使用sphinx搜索引擎
sphinx是一个高效的搜索引擎,分词搜索的速度比较快,索引建立存储在硬盘文件,不会干扰数据库,有自己内置的一套数据库. 一. 安装.配置 1.ubuntu安装sphinx 如果没有安装aptitud ...
- 010Edit手写PE
前言PE结构DOS头IMAGE_DOS_HEADERPE头介绍总大小[248字节]结构体含义标记(4字节)0x4550文件头(20字节)扩展头(224字节)为程序添加ExitProcess函数 前言 ...
- 【转】.NET程序员提高效率的70多个开发工具
原文:.NET程序员提高效率的70多个开发工具 工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢?本文为各ASP.NET 开发者介绍一些高效实用的工具,涉及SQL 管理,VS插件 ...
- VBA XML信息提取
Option Explicit Sub 读取XML节点() '后期绑定 'Dim xdoc As Object 'Set xdoc = CreateObject("MSXML2.DOMDoc ...
- linux wc使用详解
转载:https://www.cnblogs.com/peida/archive/2012/12/18/2822758.html Linux系统中的wc(Word Count)命令的功能为统计指定文件 ...
- C/C++字符串函数使用整理
#strlen+功能:求字符串长度.+说明:strlen(a) 函数类型常为int,返回字符串长度大小,参数为字符数组名,也可为字符串和指向字符串的指针.+使用样例: char a[ ]={" ...
- 4,postman和newman的联合使用
1:下载安装node.js http://nodejs.cn/ 出现版本号证明安装node.js成功 2:安装newman npm install -g newman --registry=https ...