我用向导生成一个对话框程序,并指定一个我设计的菜单,菜单其中有一个check菜单,
我用如下方法改变不了菜单的SetCheck状态。为什么啊!
菜单的消息映射是用类向导加的。m_ShadowFlag初始为真
void CMyDlg::OnShadowMenu() 
{
// TODO: Add your command handler code here
m_ShadowFlag=!m_ShadowFlag;
}void CMyDlg::OnUpdateShadowMenu(CCmdUI* pCmdUI) 
{
// TODO: Add your command update UI handler code here
//改变菜单的钩选状态
pCmdUI->SetCheck(m_ShadowFlag);
}

解决方案 »

  1.   

    还是不行啊?check状态不变啊!但是debug跟踪时看到m_ShadowFlag是变的啊!
    就是菜单状态不变啊!急急啊!菜单我都删了建,建了删好几次啦!
      

  2.   

    int m_ShadowFlag=1;
    void CKkkDlg::OnMenuitem() 
    {
    // TODO: Add your command handler code here
    if(m_ShadowFlag==0)
    m_ShadowFlag=1;
    else
    m_ShadowFlag=0;
    }void CKkkDlg::OnUpdateMenuitem(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
    pCmdUI->SetCheck(m_ShadowFlag);
    }
    改成int还是不行啊!那位高手帮看一看,或试一试,我连程序与菜单重建了好几遍啦!
      

  3.   

    还有一点:
    控制变量:m_ShadowFlag必须在InitInstance()里进行初始化!
      

  4.   

    难道在对话框程序中加菜单,不能改变菜单check状态吗?
      

  5.   

    是在CMyDLG::CMyDLG(CWnd* pParent /*=NULL*/)初始化m_ShadowFlag的。
    另外:我试了改用如下方法
    void CMyDlg::OnUpdateMenuitem32777(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
    CMenu *hmnu = GetMenu();  //得到菜单
     if(m_ShadowFlag)
     {  
       CheckMenuItem(hmnu->m_hMenu, ID_MENUITEM32777, MF_CHECKED);//菜单选中
      }
      else
      {
       CheckMenuItem(hmnu->m_hMenu, ID_MENUITEM32777, MF_UNCHECKED);//菜单不选中
     }
    }
    可以改变对话框中的主菜单的CHECK状态了,但是我还在对话框中设置了一个弹出菜单,
    我主要是想改变弹出菜单中某个菜单项的CHECK状态,还是用如上方法,就是改不了啊!
    我想是不是CMenu *hmnu = GetMenu();  //只是得到窗口主菜单,而不是我的弹出菜单的柄啊!?
      

  6.   

    对,GetMenu得到的是系统菜单。你要得到你自己添加的菜单的句柄可以用CMenu类的GetSubMenu来获得。