学习了扩展消息的总结之后,最深的体会是MFC里面的东西很严谨,任何一个步骤都不可缺少。这个接下来说。先总结一下。
到此为止,可以有以下三种方法可以将多个控件的消息让一个消息映射函数处理。
(1)利用ON_COMMAND_EX。缺点:旧式通知消息不支持。优点:不要求控件的ID连续,可以让消息继续传递,因为它的返回值是个BOOL类型,如果返回FALSE,就可以让消息继续传递;参数NID可以很清楚地分辨出消息的发送者到底是哪个控件。所以我觉得对于非旧式通知消息最好是采用这种方式。
(2)利用ON_COMMAND_RANGE。缺点:反射消息不支持,并且需要控件的ID连续。优点:可以分辨出消息的来源者。
(3)手工添加消息映射。缺点:无法分辨消息的来源者,因为往往是对所有控件需要做完全一样的操作的时候才用。优点:很灵活,对所有的消息都适应。
注意事项:
1.按钮消息默认为局部消息,菜单和工具栏默认为全局消息。因此如果你在基本对话框模板想测试按钮的此类消息时,往往不能让消息被应用程序或者主框架接收。这时候可以将按钮的ID号改为0X8000到0XF000(可以取0X8000,不能取OXFFF0)之间的一个值,将按钮消息改为全局消息。由于菜单和工具栏默认为全局消息,故无此问题。
2.在ON_COMMAND_EX中,其实只是改变了消息映射的返回值(FALSE),从而让消息得以继续传递。那么我们自己手动地添加消息映射函数,并且返回FALSE,那么消息是否也一样被传递呢?答案是不会。原因是,MFC提供了对ON_COMMAND_EX支持,使得ONWNDMSG的返回值改变。而在我们自己添加消息映射函数的时候,虽然表面上返回了FALSE,凡是CWND::ONWNDMSG的返回值仍然是1,所以只要你映射了该消息,该消息就不会继续传递。
3306

被折叠的 条评论
为什么被折叠?



