我们经常使用VC6.0 的菜单来完成某些任务。但是你有没有深究其路由的过程呢?
我们添加一个菜单,并在视类 文档类 框架类 应用程序(即:C*App类)添加他的消息响应函数时,它的执行顺序是什么?
顺序是:视类——>文档类——>框架类——>应用程序
Windows 的消息分为三类:
标准消息:除WM_COMMAND 之外的,以WM_开头的消息。
命令消息:来自菜单,工具栏,加速键(快捷键)的消息
通知消息:由控件产生的(如按钮)
而命令消息,通知消息只能被从CCmdTarget派生的类处理,不能接受标准消息。标准消息由从CWnd派生的类处理。
当单击命令菜单时,首先接收消息的是框架类,然后框架类交给视类,视类根据消息映射机制看能否处理,不能则交给文档类。
文档类处理过程同视类。假如不能处理,则交给视类,由视类交给框架类,框架类根据消息映射机制看能够处理。不能则交给应用程序类处理。