网上查的资料大都是在MainFrame类中的菜单项操作,我的应用中需要在View类中禁用菜单中的某一项。
具体:当选择一项后,把所选的项变灰禁用。
问题:选中后没有被变灰禁用,而且输出中提示:Warning: no message line prompt for ID 0x800B.
代码:
void CHSR3_TestView::OnCreat()
{
// TODO: 在此添加命令处理程序代码
m_bDataSource=FALSE;

CMainFrame *pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMenu*   mmenu   =  pMainFrame-> GetMenu(); 
CMenu* submenu = mmenu->GetSubMenu(5);
submenu->EnableMenuItem(ID_CREAT,  MF_BYCOMMAND   |   MF_DISABLED   |   MF_GRAYED);
}
先谢了!!!!

解决方案 »

  1.   

    你在CmaimFrame 处理响应菜单的命令更新消息 ,ON_UPDATE_COMMAND_UI然后
    void CMainFrame::OnUpdateViewNavigation(CCmdUI *pCmdUI)
    {
    pCmdUI->Enable( m_bNavigationVisible );
    }
    在view里面获取CMainFrame的指针,更新m_bNavigationVisible 这个变量的值就可以了,  
      

  2.   

    用ON_UPDATE_COMMAND_UI,在View类中也可实现。但我不知道为什么在View类中我写的不能实现,而且还不报错,只有个Warning,我感觉这其中应该有些问题我不了解,我查也查不着,那位能给解释下,非常感谢!!!!
      

  3.   

    在view中其实有时候不一定的,比如分割窗口有2个view,那么没有焦点的那一个的ON_UPDATE_COMMAND_UI就调用不到。
    你写的EnableMenuItem执行过了,可是MFC框架又会试图查找ON_UPDATE_COMMAND_UI映射,结果又重新enable一次。
    你可以把mainframe的m_bAutoMenuEnable干掉,框架就不干活了。不然,还是要映射。
      

  4.   

    这个m_bAutoMenuEnable = FALSE;有在CMainFrame类中的构造函数中有加吗?
      

  5.   

    感谢各位,又查了一下问题基本弄清楚了。由于消息的响应顺序为View—>Doc->Mainframe->App,在View中虽然禁用了,但还会进入MainFrame中,使其不自动Enable即可只响应View类中的操作。