在属性栏中选择“Checked”,去掉这个标志使用WM_KICKIDLE

解决方案 »

  1.   

    我也试过了,仍然没有效果呀!WM_KICKIDLE 是个什么消息?我在msdn查不到。
      

  2.   

    是不是参数设置的问题?
    pMenu->CheckMenuItem(menuitemID,MF_BYCOMMAND|MF_CHECKED);   
      

  3.   

    补充:
    CMenu *pMenu=new CMenu();
    pMenu->LoadMenu (MENUSRCID);
      

  4.   

    在属性里选择“CHECKED”,实现CHECK(打勾、打点),还要添加UPDATE_COMMAND的实现,使用一个标志变量如:BOOL m_bFlag.
    在构造函数里初始化:
    m_bFlag = FALSE;
    在UPDATE_COMMAND_UI的实现里加入:
    pCmdUI->Enable(TRUE);
    pCmdUI->SetCheck(m_bFlag);
    在UPDATE_COMMAND的实现里加入:
    m_bFlag = !m_bFlag;
    OK!
    可以给分了吧:)
      

  5.   

    非常谢谢大家。
    你们这些方法我都试过了,仍然没有效果....能否将简单的完整代码贴一下呢?
    或者发到 [email protected]
    再次感谢您们!!
      

  6.   

    在基于对话框的程序里,在UPDATE_COMMAND_UI的实现里,最好不要使用pCmdUI参数,他在文档——视结构中很好使,但在基于对话框的程序里不好使,要实现你的操作,可以这么做:
    1。在资源管理其中编辑你的Menu,假设ID=ID_MENU1,这个Menu有一个Pop-up Menu named "Test",其下有一个子Menu named "Test_Check",ID=ID_TEST_CHECK。好了,Menu画完了。
    2。在C***Dlg类中加一个CMenu类的变量,named my_menu1。
    3。在C***Dlg::OnInitDialog()函数中加入这几行:
    CCccDlg::OnInitDialog(){
    .......
    my_menu1.LoadMenu(IDR_MENU1);//装载Menu
    SetMenu(&my_menu1);//显示Menu.......
    }
    4。响应菜单项Test_Check的UPDATE_COMMAND_UI消息
    void CCccDlg::OnUpdateTestCheck(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
    my_menu1.CheckMenuItem(ID_TEST_CHECK,MF_CHECKED);//MF_CHECKED为打上钩
                                                          //MF_UNCHECKED为取消钩

    }好了,会了吧,还有一点要注意:很重要的哦!!!
    对于文档——视结构,当你的Menu被拉下的时候,UPDATE_COMMAND_UI消息被触发,当你选种某个子Menu时,这个Menu的COMMAND消息被触发,所以UPDATE_COMMAND_UI一般在COMMAND之前被触发。
    对于基于对话框的程序里的菜单结构,当你的Menu被拉下的时候,UPDATE_COMMAND_UI消息不被触发,当你选种某个子Menu时,这个Menu的COMMAND消息被触发,然后,UPDATE_COMMAND_UI消息被触发,所以UPDATE_COMMAND_UI一般在COMMAND之后被触发。
      

  7.   

    问题解决了
    感谢jerry_mouse(),感谢大家!