ON_UPDATE_COMMAND_UI(ID_PARAMETER_COM1,&CdriverDlg::OnUpdateCheck1)ON_COMMAND(ID_PARA...
ON_UPDATE_COMMAND_UI(ID_PARAMETER_COM1, &CdriverDlg::OnUpdateCheck1)
ON_COMMAND(ID_PARAMETER_COM1, &CdriverDlg::OnCheck1)
ON_UPDATE_COMMAND_UI(ID_PARAMETER_COM2, &CdriverDlg::OnUpdateCheck2)
ON_COMMAND(ID_PARAMETER_COM2, &CdriverDlg::OnCheck2)
static BOOL state = TRUE;
void CdriverDlg::OnUpdateCheck1(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(state);
}
void CdriverDlg::OnCheck1(CCm)
{
state=!state;
}
void CdriverDlg::OnUpdateCheck2(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(state);
}
void CdriverDlg::OnCheck2()
{
state=!state;
}
这个实现了两个菜单项之间上述的互斥,但是点自己也去掉勾了,多个更不行了,怎么控制呢?
GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_PARAMETER_COM1,MF_BYCOMMAND | MF_CHECKED);
GetMenu()->GetSubMenu(1)->CheckMenuItem(ID_PARAMETER_COM2,MF_BYCOMMAND |MF_UNCHECKED );
这样是可以,但是很傻,多项就很乱
怎么会乱呢
为每个菜单添加相应的事件
int Mode;
enum {
mode1,
mode2,
mode3
};
void CTestView::OnTestone()
{
Mode=mode1;
}
void CTestView::OnTesttwo()
{
Mode=mode2;
}
void CTestView::OnTestthree()
{
Mode=mode3;
}
void CTestView::OnUpdateTestone(CCmdUI *pCmdUI)
{
pCmdUI->SetRadio(Mode==mode1);
}
void CTestView::OnUpdateTesttwo(CCmdUI *pCmdUI)
{
pCmdUI->SetRadio(Mode==mode2);
}
void CTestView::OnUpdateTestthree(CCmdUI *pCmdUI)
{
pCmdUI->SetRadio(Mode==mode3);
}
本回答被提问者采纳