此工程为“基于对话框”(Lists),我给它加了一个菜单(IDR_MENU),方法是在“资源编辑器”中将菜单的ID给对话框。然后在“类向导”里将此菜单与对话框联系起来。
------------------可是-------------------------------------
我的菜单怎么不能设置“check"标志呢???!!!
比如我的一个POPUP菜单中第一项为“All"(IDM_ALL),这是响应它COMMAND的函数:
void CListsDlg::OnAll() 
{
  // TODO: Add your command handler code here
  CMenu menu;
menu.LoadMenu(IDR_MENU);
menu.CheckMenuItem(IDM_ALL,MF_CHECKED | MF_BYCOMMAND);
}
可是没有任何效果!!!!!!!!
实在不行,我又加了一个响应它UP_COMMAND_UI的函数:
void CListsDlg::OnUpdateAll(CCmdUI* pCmdUI) 
{
   // TODO: Add your command update UI handler code here
   pCmdUI->SetCheck(1);

}
可是还是不行????!!!!!!!!!!!!!
为什么呢????????!!!!!!!!!!!!!!!!
请高手帮助!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    ??????!!!!!!!!!!!!Help!!!!!!!!!!!!!!
      

  2.   

    menu.GetSubMenu (0)->EnableMenuItem(IDM_ALL,!bConfigmachine);
      

  3.   

    1)
    void CListsDlg::OnAll() 
    程序肯定是错的CMenu menu;
    menu.LoadMenu(IDR_MENU);menu临时变量,临时LoadMenu, 在OnAll()结束时析构了,跟你显示的菜单无关。2)
    void CListsDlg::OnUpdateAll(CCmdUI* pCmdUI) 
    不知道是否能执行到。跟踪了吗?
      

  4.   

    建议
    CListsDlg::OnAll()
    {
      CMenu* menu = GetMenu();
      menu->CheckMenuItem(IDM_ALL,MF_CHECKED | MF_BYCOMMAND);
    }
      

  5.   

    在对话框中使用这种功能需要自己手工设定Check标志如果你跟踪到MFC的内部代码会发现MFC的代码内根本没作处理而文档视图类结构中则作了处理!
      

  6.   

    To qindq:
       你照你的做了,果然可以。
       但是我想请问:为什么同样是临时变量,GetMenu()就可以呢?
    还有,void CListsDlg::OnUpdateAll(CCmdUI* pCmdUI)这个函数不一定会执行吗???为什么???????
       谢谢!!!!!!!
      

  7.   

    1)关键不是临时变量的问题, 而是menu.LoadMenu(IDR_MENU)重新在资源中Load一份,与Dialog中的menu是两回事。而且,menu析构时自动作了DeleteMenu(),所以没有起到任何作用.2)CCmdUI 是专门为CFrameWnd之类的东东设计的, CFrameWnd在创建时, MFC自己作了LoadMenu, LoadToobar 之类的事, 所以 MFC 会以各种方式记住MainMenu, MainToolBar. 而CDialog...  Menu是你一相情愿加上去的, MFC没有设计这样的机制为你处理(他认为默认没有Menu). 就只能我们自己动刀了.至于OnUpdateAll是否执行了, 其实我没把握. 但肯定的说,即使执行了,也不会作用在我们自己加的Menu上.