VC的MDI程序中如何获得主菜单的句柄并对其状态和菜单文字进行修改,最好有代码,谢谢!

我在主框架程序中,某个菜单的响应消息中代码CWnd*pMain=AfxGetMainWnd();if(pMain!=NULL){CMenu*pMenu=pMain->Ge... 我在主框架程序中,某个菜单的响应消息中代码
CWnd* pMain = AfxGetMainWnd();
if (pMain != NULL)
{
CMenu* pMenu = pMain-> GetMenu(); //这里永远为空
pMenu->ModifyMenu(ID_FILE_NEW, MF_BYCOMMAND , ID_FILE_NEW, strConnectTitle);
}
}

请求高手指示,哪里错了?该如何编写?分数可以增加!
展开
 我来答
pkaafa
2010-12-03 · TA获得超过450个赞
知道小有建树答主
回答量:704
采纳率:0%
帮助的人:507万
展开全部
GetMenu(),是得到一个窗口的菜单的句柄。CreateWindow里面有个参数就是设置这个的,MDI/SDI程序都可以通过这个获取主菜单句柄。DLG程序如果有菜单,一样可以获取。
如果是系统菜单——,程序图标的弹出菜单,使用GetSystemMenu。获取主菜单句柄。
如果是右键菜单,大都是临时生成的句柄,不容易得到。除非是实现生成的一个句柄,右键点时候直接使用的。那就能知道这个句柄的值了。
GetMenuItemCount获取菜单项的个数。 GetMenuItemID GetMenuItemInfo GetMenuString等都是获取菜单句柄的某项的数据信息。

GetSubMenu 应该就是你要的函数来,得到子菜单的句柄,比如你要得到弹出菜单的子菜单,就用这个,就能得到子菜单句柄。再根据上面的获取子项的函数,来获取子菜单信息。
(具体看MSND,上面说明很详细,还有例子)
测绘地理信息
2010-12-03 · TA获得超过2204个赞
知道小有建树答主
回答量:516
采纳率:100%
帮助的人:473万
展开全部
你的代码我试过了,是没有问题的。这是我的代码:
void CMainFrame::OnTest()
{
// TODO: Add your command handler code here
CWnd* pMain = AfxGetMainWnd();
if (pMain != NULL)
{
CMenu* pMenu = pMain-> GetMenu(); //这里永远为空
pMenu->ModifyMenu(ID_FILE_NEW, MF_BYCOMMAND , ID_FILE_NEW, "MenuTitle");
}
}

对菜单的状态和文字进行修改,其实不需要这样做,直接为相应的菜单添加UPDATE_COMMAND_UI消息即可,例如在CMainFrame中,可以这样写(这只是更改菜单的几个示例):
void CMainFrame::OnUpdateFileNew(CCmdUI* pCmdUI)
{
pCmdUI->Enable(FALSE); // 使菜单无效
pCmdUI->SetCheck(TRUE); // 前面加小勾
pCmdUI->SetText("Close"); // 更改文本
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
stone_dongdong
2010-12-04 · TA获得超过2853个赞
知道大有可为答主
回答量:1636
采纳率:0%
帮助的人:1023万
展开全部
错误可能是这儿,AfxGetMainWnd得到的不是你主线程的主窗口。
你的这段代码的是否在主线程里面执行?如果不是的话,是获取不到主线程绑定的主窗口的。
——通过别的方式可以获取。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式