近期需要实现一个功能: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. BT是如何下载的

    BT协议简介 一.BT下载是怎么来的? 在互联网上下载文件的方式大概有这么几种:FTP.HTTP.BT.eMule(电驴)等, 浏览器会直接支持FTP和HTTP下载,BT和eMule下载一般需要专用的 ...

  2. A Free , Fast and Small Automatic Formatter for C , C++ , C# , Java Source Codes

    A Free , Fast and Small Automatic Formatterfor C , C++ , C# , Java Source Codes Indenting source cod ...

  3. Day1:T1 模拟 T2 拓扑排序

    T1:模拟 自己第一天的简直跟白痴一样啊...模拟都会打错.. 当时貌似在更新最大值的时候打逗比了... if((sum[x]==max && x<maxh) || sum[x] ...

  4. TOGAF架构能力框架之架构能力建设和架构治理

    TOGAF架构能力框架之架构能力建设和架构治理 为了确保架构功能在企业中能够被成功地运用,企业需要通过建立适当的组织结构.流程.角色.责任和技能来实现其自身的企业架构能力,而这也正是TOGAF的架构能 ...

  5. Discuz! X2.5数据库字典(转)

    DROP TABLE IF EXISTS pre_common_admincp_cmenu; CREATE TABLE pre_common_admincp_cmenu ( `id` SMALLINT ...

  6. IP地址分类(转)

    IP地址分类以及C类IP地址的子网划分 国际规定:把所有的IP地址划分为 A,B,C,D,E A类地址:范围从0-127,0是保留的并且表示所有IP地址,而127也是保留的地址,并且是用于测试环回用的 ...

  7. Android 下载模块分析(DownloadManager和DownloadProvider)

    Android下载模块主要有2个部分组成:DownloadManager和DownloadProvider:其中DownloadManager提供接口供调用,具体的实现是 DownloadProvid ...

  8. 让textbox紧贴IME

    将textbox放与页面最下方,并取消ApplicationBar. IE的ApplicationBar里放个了textbox,效果很炫,最重要用户体验很好. 于是也想对自己textbox做这样的设计 ...

  9. C# BackgroundWorker详解,图例,原理分析

    先声明,大部分资料均参考网上,进行了整理. 1. 在 VS 中添加了 BackgroundWorker 组件, 该组件在多线程编程方面使用起来非常 方便,然而在开始时由于没有搞清楚它的使用机制, 走了 ...

  10. Dragon Balls(hdu3635带权并查集)

    题意:n个城市有n个龙珠,T  a,b 代表将龙珠a移动到b城市,Q a代表查询龙珠a所在城市,该城市有多少颗龙珠,该龙珠移动了多少次. 注意:移动时是将龙珠所在该城市所有龙珠都移动,每个龙珠不会再回 ...