这一课是讲菜单的,对于一些无需理解的操作,就不记了,重点写写自己的理解
1.命令更新
更新命令UI处理程序仅用于弹出式菜单项上的项目,不能应用于永久显示的顶级菜单
当按下弹出菜单按钮时发出INITMENUPOPUP消息,从《windows程序设计》知道这个结构体中保存了这些内容
WPARAM:弹出式菜单句柄
LOWORD(LPARAM):弹出式菜单的索引
HIWORD(LPARAM):系统菜单为1,其他为0
CFrameWnd接受这个消息后创建CCmdUI对象,调用DoUpdate函数,发出CN_UPDATE_COMMAND_UI,消息中保存有CCmdUI的指针,用这个消息设置于下一个菜单项的关联。
ON_CN_UPDATE_COMMAND_UI的作用是进行消息处理,如果有这个宏,就调用处理函数,如果没有,就进行上述的流程
这里的菜单项起作用的时候必须和相应的对象对应,就像控件一样,这里的对象就是CCmdUI,当一个菜单项没有设置处理函数的时候,说明这一项暂时不起作用,就去遍历下一项。如果有对应处理函数,处理完后遍历下一项。
例如顶层菜单项“编辑”下有“删除”“复制”“粘贴”三项
当点击“编辑”时,就发送CN_UPDATE_COMMMAND_UI,,由“删除”先接受,如果有内部处理(测试的时候进行了菜单项变灰的设置),完成后发送CN_UPDATE_COMMAND_UI消息,由“复制”接受,一步步遍历,直到所有的菜单项都处理完。
捎带提一句,要让图标和菜单项关联,只有ID一样就可以。如果想要两者效果完全相同,在调用菜单项和图标时都是用ID号而不是position。
简单说就是COMMAND 处理菜单的功能,UPDATE_COMMAND_UI处理菜单本身的状态。
阅读(689) | 评论(0) | 转发(0) |