如何在MFC中将子菜单添加到CMenu?

时间:2009-07-20 21:14:33

标签: c++ mfc menu submenu cmenu

我有一个MFC应用程序,它使用CMenu作为主菜单栏 我无法成功创建子菜单。

我可以拥有第一级文件,编辑,视图等及其子菜单,但我无法从其中一个菜单创建子菜单。

例如,我希望能够在子菜单中找到File-> Recent Items-> 项目列表
我可以使用VS中的资源编辑器轻松完成此操作,但这需要动态完成。

我在CMenu使用正确的班级吗?关于尝试什么的任何建议?
我还没有找到任何体面的教程。即使把我指向正确的也会有所帮助。

2 个答案:

答案 0 :(得分:2)

使用资源编辑器添加包含一个占位符项的子菜单。然后,您可以以编程方式获取对此子菜单的引用,向其中添加项目并删除占位符项:

CMenu *subMenu = mainMenu.GetSubMenu( menuPosition );

if( subMenu )
{
    for( unsigned i = 0; i < stringArray.size(); i++ )
    {
        subMenu->AppendMenu( MF_STRING, 400 + i, stringArray[i]);
    }

    subMenu->DeleteMenu( ID_SUBMENU_PLACEHOLDER, MF_BYCOMMAND );
}

答案 1 :(得分:0)

今天我必须做同样的事情,我在VS2008上使用Feature Pack(新的UI东西),并且正在查看示例,并且有关于如何动态添加菜单项的示例(http://msdn.microsoft.com/en-us/library/bb983167.aspx

您需要覆盖CFrameWndEx :: OnShowPopupMenu方法。

最大