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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc 多文档中怎样动态添加菜单项?相关的知识,希望对你有一定的参考价值。

在单文档中动态添加菜单可以在CMainFrame的OnCreate函数中定义CMenu对象,如下
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

TRACE0("Failed to create toolbar\n");
return -1; // fail to create


if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))

TRACE0("Failed to create status bar\n");
return -1; // fail to create


// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
CMenu cm;
cm.CreatePopupMenu();
GetMenu()->AppendMenu(MF_POPUP,(UINT)cm.m_hMenu,"test");
cm.Detach();
return 0;


但是在多文档中这么写就不会显示,求解!请附代码,谢谢!

pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyScrollViewDoc),
RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口
RUNTIME_CLASS(CMyScrollViewView));这个函数将文档类视类和框架类结合在一起,这个是单文档的组织形式,所以在单文档中框架类始终没有改变,所以可以动态加载菜单;
pDocTemplate = new CMultiDocTemplate(IDR_questionTYPE,
RUNTIME_CLASS(CquestionDoc),
RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架
RUNTIME_CLASS(CquestionView));而这个是多文档的组织形式,可以看到第三个参数变成了CChildFrame,而不是CMainFrame,第一个参数也有所改变看,所以每新建一个多文档就会对应一个CChildFrame,所以动态添加的菜单不会显示在CMainFrame上,多文档不共用框架类
参考技术A 用new CMenu试试,具体自己查MSDN

在我的菜单项之后,如何禁用“文件”菜单中的文档列表?

【中文标题】在我的菜单项之后,如何禁用“文件”菜单中的文档列表?【英文标题】:How can I disable the document listing in the File menu, after my menu items? 【发布时间】:2013-05-24 15:01:49 【问题描述】:

我正在对 MFC MDI 应用程序进行维护,我需要从主窗口菜单中删除子文档窗口条目。 我的文件菜单模板只有一个项目,即退出条目,但在执行时,子窗口会在那里添加条目。

我不是 MFC 开发人员,我只是想通过它来改变这一点。也许我理解的东西倒过来了……请照亮我。

【问题讨论】:

【参考方案1】:

在 InitInstance 函数中,您可以调用 LoadStdProfileSettings,将 nMaxMRU 参数设为 0。

【讨论】:

我想我没有得到任何相关的搜索结果,因为我错过了 MRU 关键字。谢谢。 我这样做了,但没有任何改变。也许我在其他地方设置这个? 斯科特,那没用。我在我的代码中找不到任何其他对 LoadStdProfileSettings 的引用,我正在单步执行调用,即使文档窗口条目放置在我的文件菜单中。

以上是关于mfc 多文档中怎样动态添加菜单项?的主要内容,如果未能解决你的问题,请参考以下文章

c#下怎样获得contextmenustrip动态添加的二级菜单项的文本

mfc 单文档 多文档 对话框 区别

VC/MFC怎样给菜单项添加勾啊

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

vs2013怎么用mfc添加菜单项消息响应函数

单文档的MFC程序,怎样为工具栏按钮添加图标