mfc 单文档中动态控制使菜单有效跟无效
mfc 单文档中动态控制使菜单有效和无效一个MFC单文档工程,系统生成的菜单我全部没有使用,自己重新设置了一
mfc 单文档中动态控制使菜单有效和无效
一个MFC单文档工程,系统生成的菜单我全部没有使用,自己重新设置了一个menu,里面包含两个菜单项,怎样实现,当点击其中一个菜单项后弹出一个对应非模态对话框的同时这个菜单项和其他的菜单项都变灰呈无效状态;并且点击弹出的对话框里的一个按钮,所有菜单项变亮,恢复有效状态。
补充:由于弹出的对话框想嵌入到主框架的窗口中,因此设置为了child属性,所以选用了非模态的对话框,但是上述目的实际想完成的是一个类似模态对话框的功能。请大家帮帮忙,给一个简单可行的方法。本人感激不尽!
[最优解释]
到MSDN看看这个宏ON_UPDATE_COMMAND_UI,你就明白啦
Demo:
ON_UPDATE_COMMAND_UI(IDC_TOOL_BTNOPENFILE, &CButtonBar::OnUpdateClickBtnOpenFile)
void CButtonBar::OnUpdateClickBtnOpenFile(CCmdUI *pCmdUI)
{
pCmdUI->Enable(TRUE);
}
[其他解释]
ON_UPDATE_COMMAND_UI就是干这项工作的
[其他解释]bool m_bAble;
void CMainFram::OnUpdateClickBtnOpenFile(CCmdUI *pCmdUI)
{
pCmdUI->Enable(m_bAble);
}
只要设置m_bAble的值就可以控制菜单的状态了。
[其他解释]不知道是不是你想要的,在一个菜单项单击消息处理函数添加下面的代码:
CMenu *pMenu;
pMenu=GetMenu();
int Count=pMenu->GetSubMenu(0)->GetMenuItemCount();
for(int i=0;i<Count;i++)
{
UINT itemID=pMenu->GetSubMenu(0)->GetMenuItemID(i);
pMenu->GetSubMenu(0)->EnableMenuItem(itemID,TRUE);
}
上面的只会禁用主菜单第一项下的所有菜单项(不包括弹出菜单下面的项)
如果要恢复的话,只要把上面EnableMenuItem函数里的第二个参数设置为假就行了。
如果你想一个菜单所有项都禁止的话。
那你就递归设置,获取主菜单下的每一个项如:
pMenu->GetMenuItemCount();
就按照这个模式调用下去。。。。。。
[其他解释]怎么没人回 啊?唔!求助啊~~~
[其他解释]设置一个BOOL标记,ON_UPDATE_COMMAND_UI
[其他解释]您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知
见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
[其他解释]已经试过,这种方法可行,赞一个!!
bool m_bAble;
void CMainFram::OnUpdateClickBtnOpenFile(CCmdUI *pCmdUI)
{
pCmdUI->Enable(m_bAble);
}
只要设置m_bAble的值就可以控制菜单的状态了。
只不过m_bAble一般设为全局变量(比如让其作为theApp的一个成员变量),方便在其他地方使用(比如在C*****view中某个函数中使用设置m_bAble=false,调用前在C*****view.cpp的顶部加入extern C*****App theApp; 就可以了)