首先弄清楚菜单命令消息路由的具体过程:当点击某个菜单项时,最先接收到这个菜单命令消息的是框架类。框架类将把接收到的这个消息交给它的子窗口,即视类,由视类首先进行处理。视类首先根据命令消息映射机制查找自身是否对此消息进行了响应,如果响应了,就调用相应的响应函数对这个消息进行处理,消息路由过程结束;如果视类没有对此命令消息作出响应,就交由文档类,文档类同样查找自身是否对这个菜单命令进行了响应,如果响应了,就由文档类的命令消息响应函数进行处理,路由过程结束。如果文档类也未作出响应,就把这个命令消息交还视类,后者又把该消息交还框架类。框架类查看自己是否对这个命令消息进行了响应,如果它也没有作出响应,就把这个菜单命令消息交给应用程序类,由后者进行处理。
如果要对菜单栏中某一个子菜单进行诸如标记,加粗显示等操作时候,该如何得到这些子菜单项呢?(注:由于主菜单是属于框架窗口,所以需要在框架窗口创建完成之后再去访问菜单对象)
方法有两种:
第一种 通过位置索引来获得要操作的菜单位置。
例如:GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED)(给主菜单第一个子菜单的第一项操作)
GetMenu() 得到框架窗口指向菜单栏的指针
GetSubMenu(Index)获得子菜单项 通过Index来索引得到的
CheckMenuItem(Index , 操作) 对得到的子菜单项 的对象 进行操作。 Index 是通过位置索引找到的对象索引号 它必须要和MF_BYPOSITION搭配使用
第二种方法 通过标识符来获得要操作的菜单位置
例如:GetMenu()->GetSubMenu(0)->CheckMenuItem(IDC_FILE_NEW,MF_BYCOMMAND|MF_CHECKED)
CheckMenuItem(IDC_FILE_NEW,MF_BYCOMMAND) 标识符查找必须要和MF_BYCOMMAND来搭配使用