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

mfc 多文档中怎样动态添加菜单项?,第1张

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上,多文档不共用框架类

菜单分为 d出式 和 菜单栏 两种。

d出式:CMenu m

a 自己创建菜单的每一项 m.CreatePopupMenu() 。。。

b;通过资源来创建 m.LoadMenu(IDR_MENU)

菜单栏:

在OnInitDialog或者OnCreate中 SetMenu(&m_menu)

1. 用LoadMenu函数从资源加载

menuMain.LoadMenu(IDR_MAINFRAME)//从资源加载,这里使用SDI的主菜单资源

2. 用CreateMenu函数创建

menu1.CreateMenu() //创建菜单,还没有菜单项

二、 添加菜单项,可用AppendMenu()在菜单的最后加、InsertMenu()在指定的位置加.

// ID_TEST1 在Resource.h 中定义,随便给个整数值,不要和已有的重复就行了

menu1.AppendMenu(MF_STRING,ID_TEST1,"Test1")// 第一项菜单项

menu1.AppendMenu(MF_STRING,ID_TEST2,"Test2")// 第二项菜单项

menu1.InsertMenu(1,MF_BYPOSITION|MF_STRING,

(UINT)ID_TEST1,"ID_TEST1")// 在第二项菜单项前添加新菜单项

三、 添加子菜单

同样用AppendMenu()、InsertMenu()函数。不过要注意参数的设置。

menu1.AppendMenu(MF_BYPOSITION|MF_POPUP|MF_STRING,

(UINT) menuMain.GetSubMenu(0) ->m_hMenu,"子菜单")

//第二个参数是菜单的句柄HMENU


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11601184.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存