DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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函数。

 

posted on 2014-02-28 10:26  DoubleLi  阅读(485)  评论(0编辑  收藏  举报