近期需要实现一个功能:MFC对话框中,一项菜单下有五个菜单项,改变菜单项选中状态,每次只能选择其中一个打勾。(单选)

然后在网上搜了下资料,稍微总结下,以防后面用到。

1.单选实现:

CMenu* menu = GetMenu()->GetSubMenu(); //获得菜单项的第二个子菜单
menu->CheckMenuRadioItem(ID_menuSkin1, ID_menuSkin6, ID_menuSkin3, MF_BYCOMMAND); //设置单选状态,函数具体详解如下

CMenu::CheckMenuRadioItem,该函数校核一个指定的菜单项并使其成为一个圆按钮项。同时不校核相关组里的其他菜单项并清除这些项的圆按钮的类型标志。

BOOL CheckMenuRadioItem(UINT idFirst,UINT idLast,UINT idCheck,UINT uFlags);

返回值:如果成功,则返回非零值,否则为0。

参数:

nIDFirst 指定(作为一个ID号或位移量,依赖于nFlags的值)单选钮组中的第一个菜单项的值。
nIDLast 指定(作为一个ID号或位移量,依赖于nFlags的值)单选钮组中的最后一个菜单项的值。
nIDItem 指定(作为一个ID号或位移量,依赖于nFlags的值)单选钮组中的被选中的菜单项的值。
nFlags 以下列方式指定nIDFirst, nIDLast或nIDItem的解释:

  • MF_BYCOMMAND  指定参数给出已存在菜单项的命令ID号。若没有设置MF_BYCOMMAND或MF_BYPOSITION,那么该值为缺省值
  • MF_BYPOSITION   指定参数给出已存在菜单项的位置。第一项在位置0
说明:
检测一个指定的菜单项,并将其选中。同时,该函数不检测关联组中其它的菜单项,并清除这些项的单选项类型标志。使用单选钮位图而非检测标记位图,将显示被检测的项。
 
注意:引用的是菜单条目的位置(第一个位置0):设为MF_BYPOSITION;引用的是菜单ID,则设为MF_BYCOMMAND。
这个组别既可按位置定义,也可按菜单ID定义。复选的项目会显示一个圆形的样式复选符号(●),而不是一个标准的复选符号(√)
 
 
如果想实现点击改变选择项,还需要在菜单子项的点击事件中,重写选中项,如下:
void CXXDlg::Onmenuskin1()
{
GetMenu()->GetSubMenu()->CheckMenuRadioItem(ID_menuSkin1, ID_menuSkin6, ID_menuSkin2, MF_BYCOMMAND); //改为ID_menuSkin2为选中项
}

2.复选框实现:

这个比较简单

CMenu* menu = GetMenu()->GetSubMenu();
menu->CheckMenuItem(ID_menuSkin3, MF_BYCOMMAND | MF_CHECKED);//通过命令ID,选中menuSkin3

CMenu::CheckMenuItem ,在弹出式子菜单中的菜单对象中添加或删除复选标记.

UINT CheckMenuItem( UINT nIDCheckItem, UINT nCheck );

返回值:
返回菜单项以前的状态:MF_CHECKED或MF_UNCHECKED。如果该菜单项不存在,那么将返回0xFFFFFFFF。

参数:
nIDCheckItem 指定由nCheck确定的将要检测的菜单项。
nCheck 指定如何检测菜单项,并如何决定菜单中菜单的位置。参数nCheck可以是MF_CHECKED或MF_UNCHECKED与 MF_BYPOSITION或MF_BYCOM MAND的组合。这些标志可通过使用位与操作进行组合。它们有下列含义:

  • MF_BYCOMMAND 指定参数给出已存在菜单项的命令ID号。它为缺省值。
  • MF_BYPOSITION 指定参数给出已存在菜单项的位置。第一项位于的位置是0。
  • MF_CHECKED 与MF_UNCHECKED一起用作开关,在菜单项之前放置缺省的检测标记。
  • MF_UNCHECKED 与MF_CHECKED用作开关,删除菜单项之前的检测标记。

说明:
在弹出菜单中为菜单项增添或删除检测标记。参数nIDCheckItem指定了将要修改的菜单项。
参数nIDCheckItem既可以标识弹出菜单项,也可以标识菜单项。在检测弹出菜单项的时候不需特别的步骤。不能检测顶层菜单。弹出菜单必须通过位置来检测,其原因在于它没有与之相关联的菜单项标识符。

 
 
 
 

[MFC] 对话框菜单项Menu选中打勾(单选,多选)的更多相关文章

  1. 菜单项(Menu)的初步认识 以及 多级菜单(SubMenu)的初步认识

    MainActivity.class public class MainActivity extends AppCompatActivity { private TextView textView; ...

  2. 建立CMenu菜单项,实现选中菜单项点击左键响应事件

    这里我只是根据自己的项目做了一些总结,实现点击右键弹出菜单项,点左键选择菜单项: CMenu menu; VERIFY(menu.CreatePopupMenu());//新建一个cmenu菜单项 m ...

  3. menu菜单项和menubutton菜单按钮的结合使用

    <!--创建需要显示的菜单按钮(munebutton),menu指定的是菜单项--><a href="javascript:void(0)" id="m ...

  4. GUI tkinter (Menu)菜单项篇

    """添加顶层菜单:1.我们可以使用Menu类来新建一个菜单,Menu和其他的组件一样,第一个是parent,这里通常可以为窗口2.然后我们可以用add_command方 ...

  5. MFC对话框编程详细学习笔记

    因最近研究工作要用到MFC,故再次重温了孙鑫老师的MFC对话框编程,因所用的编译软件为VS2008,与视频中孙老师使用的VC++6.0有很大出入,造成很大不便,我通过各方查找,实现了VS2008相对应 ...

  6. MFC 对话框添加菜单

    1.在Resource View 里右击菜单里选择Add Resource,选择menu,添加一个IDR_MENU1的菜单.在编辑器编辑菜单,添加菜单项,命名各个菜单项的ID. 2.在所要添加菜单的对 ...

  7. VS2010/MFC对话框一:创建对话框模板和修改对话框属性

    创建对话框主要分两大步: 第一,创建对话框资源,主要包括创建新的对话框模板.设置对话框属性和为对话框添加各种控件: 第二,生成对话框类,主要包括新建对话框类.添加控件变量和控件的消息处理函数等. 创建 ...

  8. Qt Widgets——动作类与小部件菜单项

    本文主要涉及以下三个类: QAction ——QWidgetAction QActionGroup QAction可称为动作类,它一般可当作菜单中的项组成菜单,也可作为工具栏上的按钮,它主要由图标.文 ...

  9. cocos2dx中的菜单项CCMenuItem及其五个子类的使用

    /*CCMenuItem是一个虚基类,因此必须实现它的五个子类之一,再把子类对象赋给父类指针,相当于多态*/ CCMenuItem *fontItem = CCMenuItemFont::create ...

随机推荐

  1. queue,指针求最短路的区别

    这里以spfa为例://都用邻接表存边: 指针: int h=1,t=1; q[h]=x; while(h<=t){ int u=q[h]; vis[u]=0; for(int i=head[u ...

  2. IOS学习之路(代码实现自动布局)

    1.将一个试图放置在其父视图的中央位置,使用限制条件. 2.创建两个限制条件:一个是将目标视图的 center.x 位置排列在其父视图的 center.x 位置,并且另外一个是将目标视图的 cente ...

  3. 温故而知新之java的collection framwork

    经常用到的List,Map等这些数据结构,都是来自于java的util包下,而java对于其整体设计,简称为collection framwork.(ps.其实,Map接口并不继承自collectio ...

  4. Oracle中如何删除某个用户下的所有数据的方法

    win+R打开cmd 使用dba身份登录: sqlplus sys/sys@orcl as sysdba; 然后使用dba身份删除某个用户: drop user apptdm_9y cascade;

  5. 关于Jquery 序列化表单的注意事项

    在JQuery 的serialize方法序列化表单的过程中,如果表单的name值最后有空格,会出现“+”号,查源码可见原因.这一小问题就浪费了半小时的时间,记录下来,备忘.

  6. ajaxFileUpload+struts2实现多文件上传

    以前有介绍过ajaxFileUpload实现文件上传,但那是单文件的,这次介绍多文件上传. 单文件上传参考:http://blog.csdn.net/itmyhome1990/article/deta ...

  7. jQuery实现返回顶部功能

    整理两个实现功能,一个是右下角的返回顶部,一个是右侧的返回顶部,分别如图               第一种实现 一.JSP或HTML(主体结构) 在body中添加 <body id=" ...

  8. Elmah错误日志工具

    Elmah错误日志工具 Exception 对于异常的处理,以前基本就是跳转到一个自定义的错误页面,觉得这样不错挺友好的.同时还是需要记录下来这些异常,才能进一步的进行修改. 怎么去记录这些错误信息呢 ...

  9. tomcat配置数据池

    1->配置servlet.xml 在 <GlobalNamingResources></GlobalNamingResources>中添加<Resource> ...

  10. iOS7 初体验

    iOS7 初体验 近日来由于iOS7的发布,引来业界的各种吐槽. 为了体验一把,我已经把iPhone5刷成了iOS7,也下载Xcode5-DP并进行了测试.我想说的是iOS7与Xcode5-DP中新增 ...