• [MFC] 对话框菜单项Menu选中打勾(单选,多选)


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

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

    1.单选实现:

    CMenu* menu = GetMenu()->GetSubMenu(2); //获得菜单项的第二个子菜单
    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(2)->CheckMenuRadioItem(ID_menuSkin1, ID_menuSkin6, ID_menuSkin2, MF_BYCOMMAND); //改为ID_menuSkin2为选中项
    }

    2.复选框实现:

    这个比较简单

    CMenu* menu = GetMenu()->GetSubMenu(2);
    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既可以标识弹出菜单项,也可以标识菜单项。在检测弹出菜单项的时候不需特别的步骤。不能检测顶层菜单。弹出菜单必须通过位置来检测,其原因在于它没有与之相关联的菜单项标识符。

     
     
     
     
  • 相关阅读:
    JAVA 入门 28 多态综合案例 内部类
    面试~线程池三大方法、七个参数、四种拒绝策略、实际应用
    面试~ThreadLocal
    主从复制、哨兵模式
    面试java并发~(lock、volatile、cas)
    面试~jvm(JVM内存结构、类加载、双亲委派机制、对象分配,了解垃圾回收)
    安装nginx
    SpringBoot注入
    springboot 引入外部包的坑Lookup method resolution failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class
    mysql并发插入死锁
  • 原文地址:https://www.cnblogs.com/zwh0214/p/6112688.html
Copyright © 2020-2023  润新知