把这些菜单的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));
}
void C**View::OnTimeUpdate(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_ePalTime == (PAL_TIME)(pCmdUI->m_nID-ID_TIME_DAY));
}
{
pCmdUI->SetCheck(true);
}
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);
}
}
这样,单击其他的,没有反应,还是只有一个打钩
第一步:把你这几个菜单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。这样,一个函数就可以控制一群菜单的状态了。没办法再详细了。
enum eMonitoringType
{
Monitoring_Horizon,
Monitoring_Level,
Monitoring_WaterLevel,
Monitoring_Stress,
Monitoring_Slope,
};这有个枚举类型,就是没用过,怎么和刚才的关联
pCmdUI->SetCheck(m_monitor_type == (eMonitoringType)(pCmdUI->m_nID-ID_VIEW_SP));
然后判断一下当前选中的菜单项
是当前项就打钩不是就取消
现在好了,是我的错,没有打开工程,导致只能选择一个打钩
多谢@happyparrot 和 @xianglitian
话说CSDN为啥不开放编辑帖子的权限呢???这样很别扭还有@一个人貌似不起作用,期望能改下