近期需要实现一个功能: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. ant svn

    <!-- 检出代码 这里使用 export 不是checkout 二者区别 checkout会svn相关信息文件检出,export只是检出最新的文件--> <target name= ...

  2. C#外挂QQ

    C#外挂QQ找茬辅助源码,早期开发   这是一款几年前开发的工具,当年作为一民IT纯屌,为了当年自己心目中的一位女神熬夜开发完成.女神使用后找茬等级瞬间从眼明手快升级为三只眼...每次看到这个就会想起 ...

  3. C#通过模板导出Word(文字,表格,图片)

    C#通过模板导出Word(文字,表格,图片)   C#导出Word,Excel的方法有很多,这次因为公司的业务需求,需要导出内容丰富(文字,表格,图片)的报告,以前的方法不好使,所以寻找新的导出方法, ...

  4. JavaScript插件——模态框

    Bootstrap3.0学习第十七轮(JavaScript插件——模态框)   前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/ ...

  5. vim复制

    关于vim复制剪贴粘贴命令的总结   最近在使用vim,感觉很好很强大,但是在使用复制剪切粘贴命令是,碰到了一些小困惑,网上找了一些资料感觉很不全,讲的也不好,遂自己进行实践并总结了. 首先是剪切(删 ...

  6. 《C++游戏开发》笔记十三 平滑过渡的战争迷雾(一) 原理:Warcraft3地形拼接算法

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9611887 作者:七十一雾央 新浪微博:http:/ ...

  7. 【NET】Winform用户控件的初步封装之编辑控件

    编辑控件 public abstract partial class TEditorBase <TEntity, TRepository, TSqlStrConstruct> : User ...

  8. K-Means算法

    K-Means算法 K-Means算法的输入N,K和一个size为N的向量组vector.输出K个两两互不相交的向量组.其本质是将给定的向量组划分成K个类别,使得同类别的向量相似度比较大,而不同类别的 ...

  9. 一键保存网页为PDF

    一键保存网页为PDF_V1.2   福利来了,“一键保存网页为PDF”发布以来最给力的功能来了: 1.支持大部分浏览器了(添加书签方式),测试IE8\IE9.谷歌.火狐可用: 2.转换组件“ephtm ...

  10. Python Redis 数据复制.

    1 > 下载Python操作Redis的客户端 https://pypi.python.org/pypi/redis/2.7.6 下载完成后,参考该网站相关命令,执行安装. 2 > 下载 ...