当前位置:C++技术网 > 资讯 > MFC命令响应路由和处理机制

MFC命令响应路由和处理机制

更新时间:2015-06-24 18:14:27浏览次数:1+次

    MFC文档视图的消息的处理,对于初学者来说还真是一个很麻烦的东西。对于基于对话框的类,处理起来还比较简单,文档视图的结构是MFC的核心,如果这个能够掌握,MFC也就用起来很顺手了。不用想要轻松驾驭MFC,还是需要投入不少精力的。最基本的就是文档视图的消息路由和处理机制。
    下面给出消息路由和处理的基本路线,只是基本的,具体的有单文档、多文档以及混合对话框等等,具体的就复杂了。为了给初学者一个低门槛,就讲解基本的文档流程,作为入门参考。
    1.框架类(不处理,继续下一步;处理则返回) -> 2.视图类(不处理,继续下一步;处理则返回) -> 3.文档类(不处理,继续下一步;处理则返回) -> 4.视图类(不处理,继续下一步;处理则返回) -> 5.框架类(不处理,继续下一步;处理则返回) -> 6.应用程序类(不处理,继续下一步;处理则返回API使用Windows默认处理)。
    框架类最先捕获命令消息,但是它首先将处理权交给子窗口视图类。视图类如果没处理,则交给文档类。如果文档类没处理,则交还给视图类。视图类则交还给框架类。此时框架类才考虑是否处理的问题。如果不处理,则交给应用程序类处理。
    特别说明:MFC消息处理机制并不是基于虚函数的机制,而是使用“函数调用机制”,这是我个人的说法,给读者一个比较好的理解方式。也就是说,基类和父类对于消息的处理,并没有借助于虚函数的继承机制,因为使用虚函数会降低效率,故微软采用了这个方式。理解起来也很简单。正是因为函数调用机制,函数都会返回一个布尔值,返回TRUE表示此函数对这个消息进行了处理,如果返回FALSE,则表示告诉上层自己没有处理。这是一个约定,因此你可以使用这个来机制来进行自定义的消息处理。比如窗口背景绘制,你可以在默认的处理函数中返回TRUE则表示你处理过了,在返回TRUE之前,你放置你自己的代码,随后就返回TRUE,这样就告诉框架你已经处理了这个消息,框架就不请求系统绘制了,背景就是你自定义的背景了。可以实现图片背景或者其他的。这个在控件重载时非常有用,可以实现非常个性的界面。
    一般自动生成的消息处理函数中,会自动加上基类的处理函数,如果你不需要,则直接删掉,如果你要额外处理一下,然后不想消息继续往后传递,则在你的代码之后,返回TRUE就可以了。如果你要屏蔽某些消息,也可以直接在响应的地方返回TRUE则可以了。
    其他各种处理,需要参考更多文章,或者评论提问,欢迎指正。