为什么我不能禁用菜单项?pMenu->EnableMenuItem()

sr388 2002-11-09 10:42:29
源代码如下:

CMenu *pMenu = GetMenu() ;
//pMenu->DeleteMenu(ID_VIEW_TOOLBAR, MF_BYCOMMAND) ;
//pMenu->DeleteMenu(ID_VIEW_STATUS_BAR, MF_BYCOMMAND) ;

pMenu->EnableMenuItem(ID_VIEW_TOOLBAR, MF_BYCOMMAND | MF_DISABLED) ;
pMenu->EnableMenuItem(ID_VIEW_STATUS_BAR, MF_BYCOMMAND|MF_DISABLED) ;

两段代码都是使用MF_BYCOMMAND方式访问菜单项。如果我DeleteMenu就能成功的删除菜单项,但是我EnableMenuItem禁用菜单却不行?为什么!!!!

用同样的方法禁用系统菜单中的"关闭"都能成功。

pMenu = GetSystemMenu(FALSE) ;
pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_DISABLED) ;

为什么不能禁用我自己添加的菜单项?555555~~~~~~~~~~~~~~~~~~~~~~~~~~~`
...全文
949 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sr388 2002-12-19
  • 打赏
  • 举报
回复
我现在只能用最笨的方法:设计两个菜单资源,在不同的视图模式下让主框架窗口挂接不同的菜单资源。
sr388 2002-12-19
  • 打赏
  • 举报
回复
To: free_card

将m_bAutoMenuEnable置为FALSE后,本来正确被主框架自动灰化的菜单项又能用了。
sr388 2002-12-19
  • 打赏
  • 举报
回复
To: zswzwy

你说的这个方法,我试过了,没用。还是无法灰化或禁用菜单项。
free_card 2002-12-02
  • 打赏
  • 举报
回复

你也可以将菜单事件写在cmainfrm中;或者
只要关掉缺省值就可以了,把下面的代码加入你的程序

CMainFrm::CMainFrm
{
// Other stuff
this->m_bAutoMenuEnable = false;
}
zswzwy 2002-12-02
  • 打赏
  • 举报
回复
CMainFrame::OnEnterIdle()
{
CMenu *pMenu = GetMenu() ;
CMenu *pMenuSub=pMenu->GetSubMenu(0); //取得子菜单
pMenu->EnableMenuItem(ID_VIEW_TOOLBAR, MF_BYCOMMAND | MF_DISABLED) ;
}
sr388 2002-12-01
  • 打赏
  • 举报
回复
是的,是在运行时更新菜单项状态。
程序中有两个视图模式,当我切换到另一个视图模式时,一部分菜单项将被禁用哎,这个问题真是烦死人了。。。
fhbkyo 2002-11-30
  • 打赏
  • 举报
回复
你是程序运行时吗?
用命令更新函数呀,响应ON_UPDATE_COMMAND_UI
添加函数后将
CCmdUI的参数指针指向Enable()
sr388 2002-11-12
  • 打赏
  • 举报
回复
飞不起来的笨鸟:你的方法我试过了。只要没把CFrameWnd::m_AutoMenuEnable设为FALSE,无论你怎么做,菜单项都不会被灰化。
ruihuahan 2002-11-11
  • 打赏
  • 举报
回复
CMenu *pMenu = GetMenu() ;
CMenu *pMenuSub=pMenu->GetSubMenu(0);
pMenu->EnableMenuItem(ID_VIEW_TOOLBAR, MF_BYCOMMAND | MF_DISABLED)
sr388 2002-11-11
  • 打赏
  • 举报
回复
原来要把CFrameWnd::m_AutoMenuEnable设为FALSE。

可是将它设为FALSE后,本来被框架窗口正确禁用了的菜单项却能用了。
有什么方法在将CFrameWnd::m_AutoMenuEnable设为FALSE后,应该灰化的菜单项继续灰化?
llm308 2002-11-10
  • 打赏
  • 举报
回复
你应该在空闲消息处理中处理该问题,处理WM_ENTERIDLE消息
CMainFrame::OnEnterIdle()
{
CMenu *pMenu = GetMenu() ;
CMenu *pMenuSub=pMenu->GetSubMenu(0); //取得子菜单
pMenu->EnableMenuItem(ID_VIEW_TOOLBAR, MF_BYCOMMAND | MF_DISABLED) ;
}
我试过是好使的
ukyoking 2002-11-10
  • 打赏
  • 举报
回复
pMenu->EnableMenuItem(ID_VIEW_TOOLBAR,MF_BYCOMMAND| MF_GRAYED);
  • 打赏
  • 举报
回复 1
pMenu->EnableMenuItem(ID_VIEW_TOOLBAR, MF_GRAYED | MF_DISABLED) ;
fhbkyo 2002-11-10
  • 打赏
  • 举报
回复
禁用一个菜单项也有这么难?
只要要属性中设置一下样式不就可以了?
运行时禁用的话也只要得到此菜单项后加个MF_DISABLED也就差不多了
ukyoking 2002-11-10
  • 打赏
  • 举报
回复
不过最好在UPDATE_COMMAND_UI中处理,设置一个bool变量,需要禁用时只需将它置为false

15,979

社区成员

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

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