如何在mfc中动态添加子菜单

Posted

技术标签:

【中文标题】如何在mfc中动态添加子菜单【英文标题】:How to add submenu dynamically in mfc 【发布时间】:2015-02-24 11:41:49 【问题描述】:

我已经使用资源编辑器在我的 Windows 程序中添加了一个菜单,现在我想在某些特定条件下添加一个子菜单。 下面是我的一段代码。

这是我的 Menu.h 文件

包括

类 CmainWn:公共 CFrameWnd

公共 :CmainWn();

DECLARE_MESSAGE_MAP()

afx_msg void OnAB();

;

类 CApp:公共 CWinApp

公共 : BOOL InitInstance();

;

这是我的 Menu.cpp

包括“菜单.h”

包括“resource.h”

CmainWn ::CmainWn()

Create(NULL,"Menu Testing",WS_OVERLAPPEDWINDOW,rectDefault,NULL,(LPCTSTR)IDR_MENU1);

BOOL CApp :: InitInstance()

m_pMainWnd=new CmainWn();

m_pMainWnd->ShowWindow(m_nCmdShow);

m_pMainWnd->UpdateWindow();

return true;

void CmainWn::OnAB()

AfxMessageBox("Hello");

BEGIN_MESSAGE_MAP(CmainWn,CFrameWnd)

ON_COMMAND(ID_A_B, &CmainWn::OnAB)

END_MESSAGE_MAP()

CApp 应用程序;

如您所见,我创建了一个名为 A 的主菜单和一个名为 B 的子菜单。 我想在B下动态添加一个菜单,怎么做?

【问题讨论】:

您的问题是this question 格式错误的版本(4 小时前提出)。 你查了吗***.com/questions/3673546/dynamic-menu-using-mfc @GingerJack 是的,我已经完成了,并且能够在运行时创建动态菜单,但无法在我的主菜单中附加为子菜单项。 我建议您阅读OnInitMenuPopup 文档。 @sergiol:它已经死了,除非你有enough reputation to see deleted content。通过点击链接,我仍然可以很好地看到这个问题。 【参考方案1】:

必须添加到 Windows 资源文件 (projectname.rc) 的示例代码

IDR_MENU1 MENU 
BEGIN
      POPUP "Main menu"
       BEGIN
           MENUITEM "Menu Item 1", ID_WINDOWS_TEST
           POPUP "Sub Menu"
        BEGIN
            MENUITEM "Sub Menu item 1",ID_WIN_TEXT
        END
    END
END 

在资源视图中查看会显示类似这样的内容

【讨论】:

这不会动态添加菜单项。

以上是关于如何在mfc中动态添加子菜单的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForm 自定义控件如何实现动态添加子控件

mfc 多文档中怎样动态添加菜单项?

如何在Qt中动态添加菜单

动态添加CONTEXTMENUstrip的子菜单后,无法响应CLICK

wpf中怎么为treeview动态添加子菜单

MFC如何动态添加控件