MFC中菜单项状态的切换

MFC中的菜单项中左边可以有一个是否选中的状态,注意不是让菜单项变灰,而是在菜单项左边出现一个钩,要实现这个效果,需要进行下面这几步操作。

1.首先在菜单项的资源文件中将属性Checked置为true,这样在资源编辑器中就可以看到菜单项左边多出了一个方格,方格里面有个钩。


2.第二步的操作时添加事件处理程序。需要添加两个事件,一个是COMMAND消息的响应事件,还有一个是UPDATE_COMMAND_UI消息的响应事件,UPDATE_COMMAND_UI这个消息平时一般很少用到,在这个地方就用到了,如果不添加这个事件,那么你点击菜单项后菜单左边的钩不会在显示和隐藏之间切换的。这两个消息响应函数一般都添加在CMainFrame这个类中。消息映射如下,在这里我定义的两个消息映射函数是OnMouseroll和OnUpdateMouseroll。

ON_COMMAND(ID_MOUSEROLL, &CMainFrame::OnMouseroll)
ON_UPDATE_COMMAND_UI(ID_MOUSEROLL, &CMainFrame::OnUpdateMouseroll)

3.在CMainFrame这个类中定义一个bool型的成员变量(这里我定义的变量名为flag)来控制菜单是否选中。在OnUpdateMouseroll中控制菜单是否选中。

void CMainFrame::OnUpdateMouseroll(CCmdUI *pCmdUI)
{
	// TODO: 在此添加命令更新用户界面处理程序代码
	pCmdUI->SetCheck(flag);
}
SetCheck这个函数就是用来控制是否显示左边的钩的,如果flag为true,那么它会显示左边的钩,如果flag为false,那么它不会显示左边的钩。

4.在OnMouseroll这个函数中修改flag的值,并添加上自己的业务逻辑。

void CMainFrame::OnMouseroll(){
	if(flag){
		//do something
	}else{
		//do something
	}
	
	flag=!flag;

}
在上面的do something里面添加上自己的业务逻辑,这样便实现了点击菜单项时菜单项左边的钩会交替出现和消失,并能实现自己的业务逻辑。

你可能感兴趣的:(C++)