关于MDI的主框架和子框架的问题!在线等

DarwinML 2004-10-29 12:26:50
多文档应用程序中,如果什么文档都不打开的时候程序运行显示的菜单使用的是IDR_MAINFRAME资源中的菜单,如果新建或者打开一个文件后使用的就是IDR_XXXTYPE了,也就是子框架资源中的菜单.

但是VC中这个部分的实现过程看不到,如果我想自己控制这个菜单资源的转化比如我自己写代码来实现新建之类的功能,我应该怎么实现菜单资源的转换呢?我尝试过LoadFrame但是会抱错,调试看到的是HELPID与新传入的ID不一致.
...全文
106 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
seanbcliu 2004-10-31
  • 打赏
  • 举报
回复
test
黑子白子 2004-10-29
  • 打赏
  • 举报
回复
消息响应只认ID,与哪个菜单都没关系,如果在多个窗口都有响应函数的话,只有一个能响应,好像是MainFrame优先。
至于你要换菜单,敝人觉得在子框架的OnMDIActivate响应函数里修改比较好。
DarwinML 2004-10-29
  • 打赏
  • 举报
回复
而且还发现一个问题,就是,如果什么代码都不写,通过向导生成一个多文档框以后,调试发现在打开或者新建一个文档后,你在菜单里面点击的按钮是属于CVIEW这个类里面的事件,而如果按照我上面的方法在CMAINFRAME里面自己添加了onfileopen事件后,即使框架上面的菜单改变了但是仍然使用的是CMAINFRAME里面的事件响应而不是和原来的一样变成CView里面的事件了
DarwinML 2004-10-29
  • 打赏
  • 举报
回复
谢谢,snaill的提示,我的最终的实现方法和你有点不同,我是这样子的
Tmp_Menu.LoadMenu(IDR_FSTTYPE);//IDR_MAINFRAME IDR_FSTTYPE
SetMenu(NULL);
::DestroyMenu(m_hMenuDefault);
SetMenu(&Tmp_Menu);
m_hMenuDefault = Tmp_Menu.GetSafeHmenu();

但是现在又引入一个新的问题,我的IDR_MAINFRAME下面只有2个菜单,但是IDR_FSTTYPE下面有多个,这个时候新的菜单虽然显示是和资源中IDR_FSTTYPE一样了,但是只有两个的状态是激活的其他都是灰色的为什么会这样子呢?
try876 2004-10-29
  • 打赏
  • 举报
回复
楼上的好
snaill 2004-10-29
  • 打赏
  • 举报
回复
GetMenu
SetMenu

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧