把这些菜单的ID号改为连续的,然后用ON_UPDATE_COMMAND_UI_RANGE(ID_TIME_DAY,ID_TIME_NIGHT,OnTimeUpdate)这种方式进行响应。
void C**View::OnTimeUpdate(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_ePalTime == (PAL_TIME)(pCmdUI->m_nID-ID_TIME_DAY));
}

解决方案 »

  1.   

    pSubMenu->CheckMenuItem(ID_MENUITEM1,MF_BYCOMMAND|MF_CHECKED);
      

  2.   

    void    CMainFrame::OnUpdateSelectBlue(CCmdUI*    pCmdUI)    
    {   
       pCmdUI->SetCheck(true);
    }
      

  3.   


    ID是连续的 ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_SP,ID_VIEW_CX,OnMenuItemViewType)
    // 设置Check
    void CBxgcView::OnMenuItemViewType(CCmdUI *pCmdUI)
    {
    if (pCmdUI->m_nID == 32899)
    {
    pCmdUI->SetCheck(1);
    }
    }
    这样,单击其他的,没有反应,还是只有一个打钩
      

  4.   

    好吧,再详细一点:
    第一步:把你这几个菜单ID号修改为连续的。打开resource.h文件,找到这些菜单ID,将ID值改为连续数值,以便可以群响应
    第二步:在视图类头文件中增加群响应函数。比如:virtual void OnTimeUpdate(CCmdUI *pCmdUI);
    第三步:在视图类cpp文件中增加消息映射。比如:ON_UPDATE_COMMAND_UI_RANGE(ID_TIME_DAY,ID_TIME_NIGHT,OnTimeUpdate)
    其中ID_TIME_DAY和ID_TIME_NIGHT分别是连续菜单ID中的起始ID和终止ID。这里是例子,按你实际的ID号写。
    第四步:在视图类cpp文件中增加消息响应函数。如:
    void C**View::OnTimeUpdate(CCmdUI *pCmdUI)
    {
    pCmdUI->SetCheck(m_ePalTime == (PAL_TIME)(pCmdUI->m_nID-ID_TIME_DAY));
    }
    你这些菜单是互斥的,可以用一个枚举类型或者整形变量来表示,pCmdUI->m_nID即为当前响应的菜单ID,将其减去起始菜单ID,就可以得到一个值,比如这里是一个枚举值,直接作为SetCheck的判断条件,相等为TRUE,不相等为FALSE。这样,一个函数就可以控制一群菜单的状态了。没办法再详细了。
      

  5.   


    enum eMonitoringType
    {
    Monitoring_Horizon,
    Monitoring_Level,
    Monitoring_WaterLevel,
    Monitoring_Stress,
    Monitoring_Slope,
    };这有个枚举类型,就是没用过,怎么和刚才的关联
      

  6.   

    现在是这样:还是只有一个打钩,单击其他没反应
    pCmdUI->SetCheck(m_monitor_type == (eMonitoringType)(pCmdUI->m_nID-ID_VIEW_SP));
      

  7.   

    为你所有想控制的菜单项连接ON_UPDATE_COMMAND_UI消息
    然后判断一下当前选中的菜单项
    是当前项就打钩不是就取消
      

  8.   


    现在好了,是我的错,没有打开工程,导致只能选择一个打钩
    多谢@happyparrot  和 @xianglitian 
    话说CSDN为啥不开放编辑帖子的权限呢???这样很别扭还有@一个人貌似不起作用,期望能改下