如何在VC中实现动态菜单功能?
菜单项状态的维护是依赖于CN_UPDATE_COMMAND_UI消息,谁捕获CN_UPDATE_COMMAND_UI消息,MFC就在其中创建一个CCmdUI对象。我们可以通过手工或利用ClassWizard在消息映射中添加ON_UPDATE_COMMAND_UI宏来捕获CN_UPDATE_COMMAND_UI消息。
在后台所做的工作是:操作系统发出WM_INITMENUPOPUP消息,然后由MFC的基类如CFrameWnd接管。它创建一个CCmdUI对象,并与第一个菜单项相关联,调用对象的一个成员函数DoUpdate()。这个函数发出CN_UPDATE_COMMAND_UI消息,这条消息带有指向CCmdUI对象的指针。同一个CCmdUI对象就设置为与第二个菜单项相关联,这样顺序进行,直到完成所有菜单项。
更新命令UI处理程序仅应用于弹出式菜单项上的项目,不能应用于永久显示的顶级菜单项目。
----孙鑫
在菜单栏中根据内容插入一个动态的菜单分一下几个步骤
m_menu.CreatePopupMenu();//插入一个弹出式菜单
GetParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)m_menu.m_hMenu,"新菜单");
GetParent()->DrawMenuBar(); //重绘
GetMenu()->InsertMenu(3,MF_BYPOSITION | MF_POPUP,(UINT)menu.m_hMenu,"新项目");//在菜单栏中插入一个名称为“新项目”的菜单项
主要是对以上函数的处理,根据实际情况判断插入的条件即可以实现。
本文地址:http://www.45fan.com/a/question/66974.html