WM_CREATE消息

该消息是Windows发送给视图的第一个消息。由于当应用程序框架调用Create函数时该消息就会被发送,而此时窗口创建还未完成,窗口还不可见,因此在控制函数OnCreate内部,不能调用那些依赖于窗口处于完全激活状态的Windows函数。

但是我们可以在被重载的OnInitialUpdate函数内调用这些函数。不过必须注意,对于SDI程序,在视图生存期间OnInitialUpdate函数可能会被调用多次。

注意:OnInitialUpdate函数是视图窗口完全建立后,在调用OnDraw函数之前第一个被调用的函数,很多初始化工作可以放在这个函数里,因此很重要。

WM_CLOSE消息

当用户从系统菜单中关闭窗口或者父窗口被关闭时,Windows都会发送WM_CLOSE消息。如果在派生视图类中重新定义了OnClose消息映射函数,就完全可以控制关闭过程。例如:如果需要提醒用户将变化的内容保存在文件中时,就可以将这步工作放在OnClose函数中来完成。只有在确认了关闭窗口是非常安全的情况下,才可以调用基类的OnClose函数,由它来继续处理关闭过程。此时,视图对象和相应的窗口仍然处于活动状态。

注意:当使用完整的应用程序框架结构时,也可以不使用WM_CLOSE的消息控制函数。作为应用程序框架的高度结构化的程序退出过程的一部分,我们可以通过重载CDocument::SaveModified虚函数来达到这个目的。

WM_QUERYENDSESSION消息

当用户退出Windows时,Windows就会发送WM_QUERYENDSESSION消息给所有正在运行的应用程序,而OnQueryEndSession消息映射函数正是用来处理这一消息的。如果我们对WM_CLOSE消息函数编写了相应的控制函数,则同样也需要对WM_QUERYENDSESSION 消息编写相应的控制函数。

WM_DESTROY消息

Windows在发送WM_CLOSE消息之后,紧接着就会发送WM_DESTROY消息,而OnDestroy消息映射函数正是处理这一消息的。当程序收到该消息时,它将假设此时视类已经完全消失,但仍然处于活动状态,并且视窗的子窗口还仍然处于活动状态。利用这个消息的控制函数,就可以在对依赖于当前窗口存在的所有东西做清除工作。不过,一定要记住,应该调用基类的OnDestroy函数,而不能在用户自己的视图的OnDestroy函数中“终止”窗口的析构过程,终止析构的处理应该放在OnClose函数中。

WM_NCDESTROY消息

当窗口被关闭时所发送的最后一个消息就是这个消息。由于此时所有子窗口都已经被关系,所以我们可以在OnNcDestroy函数中做一些不依赖于该窗口是否处于活动状态的最后的处理工作,不过最好一定要调用基类中的OnNcDestroy函数。

特殊的Windows消息的更多相关文章

  1. Windows消息机制

    Windows的消息系统是由3个部分组成的: · 消息队列.Windows能够为所有的应用程序维护一个消息队列.应用程序必须从消息队列中获取消息,然后分派给某个窗口.· 消息循环.通过这个循环机制应用 ...

  2. windows消息机制详解(转载)

    消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了.例如,单击鼠标.改变窗口尺寸.按下键盘上的一个键都会使Windows发送一个消息给应用程序.消息本身是作为一个记录传递给应用程序的 ...

  3. windows消息钩子注册底层机制浅析

    标 题: [原创]消息钩子注册浅析 作 者: RootSuLe 时 间: 2011-06-18,23:10:34 链 接: http://bbs.pediy.com/showthread.php?t= ...

  4. Windows消息机制详解

    消息是指什么?      消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向 Windows发出一个通知,告诉应用 ...

  5. Windows消息机制知识点总结

    1.windows消息类型 以下四种,前三种是系统消息,范围在[0x0000, 0x03ff],第四种是用户自定义消息. 1.1 窗口消息 与窗口的内部运作有关,如创建窗口,绘制窗口,销毁窗口等.可以 ...

  6. Windows消息大全(转)

    原链接地址: http://www.cnblogs.com/icebutterfly/archive/2011/08/05/2128864.html 表A-1 Windows消息分布 消息范围说 明 ...

  7. Windows消息过滤

    在C#编程中,经常会遇到一些场景,如禁止鼠标拖动窗体,启用某些快捷键,禁止鼠标移动等.遇到这些需求,可以通过窗体的MouseMove事件,OnDragDrop,OnMove等事件来解决问题, 但是该方 ...

  8. 【转】windows消息和消息队列详解

    转载出处:http://blog.csdn.net/bichenggui/article/details/4677494  windows消息和消息队列 与基于MS - DOS的应用程序不同,Wind ...

  9. Windows GUI代码与Windows消息问题调试利器

    Windows GUI代码与Windows消息问题调试利器 记得很久前有这么一种说法: 人类区别于动物的标准就是工具的使用.同样在软件开发这个行业里面,对于工具的使用也是高手和入门级选手的主要区别,高 ...

  10. 我对windows消息机制的理解(参考深入浅出MFC,欢迎批评指正!!)

    以消息为基础,以事件驱动之 程序的进行依靠外部消息来驱动,即:程序不断等待任何可能的输入,然后做判断,然后再做适当的处理. 消息输入:操作系统捕获,以消息形式进入程序.(操作系统通过其USERS模块中 ...

随机推荐

  1. 《UNIX环境高级编程》笔记--sync、fsync和fdatasync函数

    传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘 I/O都通过缓冲进行.当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列 ...

  2. quartz群调查调度机制和源代码分析

    pageId=85056282#quartz集群调度机制调研及源代码分析-quartz2.2.1集群调度机制调研及源代码分析" style="color:rgb(59,115,17 ...

  3. Android中文API(129) —— AudioManager

    前言 本章内容是android.media.AudioManager,版本为Android 3.2 r1,翻译来自"文炜",欢迎访问他的博客:"http://www.cn ...

  4. Java进阶05 多线程

    链接地址:http://www.cnblogs.com/vamei/archive/2013/04/15/3000898.html 作者:Vamei 出处:http://www.cnblogs.com ...

  5. C++的运算符

    C++的运算符十分丰富,使得C++的运算十分灵活方便.例如把赋值号(=)也作为运算符处理,这样,a=b=c=4就是合法的表达式,这是与其他语言不同的.C++提供了以下运算符: 算术运算符+(加)  - ...

  6. NGUI 3.5教程(二)Label 标签 (Hello world)、多行文本

    写在前面:     本文将创建NGUI的第一个样例.依照编程传统,第一个样例,就是做一个Hello world 显示出来.NGUI.我们用Label来实现 . 欢迎大家纠错.拍砖!原创非常辛苦,如有转 ...

  7. linux: Ubuntu安装samba的问题

    Ubuntu安装samba的问题 http://blog.csdn.net/jk110333/article/details/8920841 root@ubuntu:~# apt-get instal ...

  8. 利用Winscp,Putty实现Windows下编写Linux程序

    本文讲的方案实现以下功能:利用winscp和putty的脚本功能,实现在Window平台上编写代码,上传到Linux进行编译,然后取编译结果.需要用到3个文件,分别如下: (1) synchroniz ...

  9. Windows 7 taskbar and startmenu pin

    原文 Windows 7 taskbar and startmenu pin 在Windows 7上,用户可以将自己喜欢的软件“钉”在开始菜单或任务栏,使用起来更加方便.但有时候我们也需要用程序来将这 ...

  10. cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示

    上篇文章我们有了坦克,但是没有手柄,无法控制坦克. 1.这篇我们编写虚拟手柄来控制坦克.头文件大致内容如下: #define RES_PADDLE_LEFT "paddle/left.png ...