• VC++ 动态生成 成组的 RadioButton 按钮组


    先说一下 静态创建的方法:

    单选按钮也属于CButton类,但由于单选按钮总是成组使用的,所以它在制作和使用上与普通按钮有一定区别。
    假设有三个单选按钮组成一组,初始时,第一个单选按钮处于选中状态。
    我们先来看静态制作方法:在对话框中放置三个单选按钮,设置属性如下:
    Radio1属性:Visible、Group、Tab stop、Auto
    Radio2属性:Visible、Tab stop、Auto
    Radio3属性:Visible、Tab stop、Auto
    这样的属性设置就把三个单选按钮分成了一组,它们一次只能有一个被选中,若对话框中还有其它成组的单选按钮,使用时也会互不干扰。但这时还没有使第一个按钮处于选中状态。接着就用ClassWizard为这组单选按钮添加变量,这里只需为第一个单选按钮添加变量即可。设变量名为m_Radio,类型选为int型。在构造函数中ClassWizard把m_Radio的值设置为-1,我们把它改为0,这样在运行程序时可以看到第一个单选按钮处于选中状态了。之后,还应该用ClassWizard为三个单选按钮添加单击响应函数,在里面修改m_Radio的值对应三个单选按钮就可以了。

    在这个静态创建时,是手工指定了Group属性.那么如何在动态创建时,指定这个属性呢.我在所有的方法里面找了一圈,没有发现.

    那会是在哪儿设置呢,总得有个办法吧!   那就只省下哪一个办法了,就是 ModifyStyle 方法,看看这个方法里面有没有相应的样式!

    我先查了按钮的样式

    #define BS_PUSHBUTTON       0x00000000L
    #define BS_DEFPUSHBUTTON    0x00000001L
    #define BS_CHECKBOX         0x00000002L
    #define BS_AUTOCHECKBOX     0x00000003L
    #define BS_RADIOBUTTON      0x00000004L
    #define BS_3STATE           0x00000005L
    #define BS_AUTO3STATE       0x00000006L
    #define BS_GROUPBOX         0x00000007L
    #define BS_USERBUTTON       0x00000008L
    #define BS_AUTORADIOBUTTON  0x00000009L
    #define BS_PUSHBOX          0x0000000AL
    #define BS_OWNERDRAW        0x0000000BL
    #define BS_TYPEMASK         0x0000000FL
    #define BS_LEFTTEXT         0x00000020L
    #if(WINVER >= 0x0400)
    #define BS_TEXT             0x00000000L
    #define BS_ICON             0x00000040L
    #define BS_BITMAP           0x00000080L
    #define BS_LEFT             0x00000100L
    #define BS_RIGHT            0x00000200L
    #define BS_CENTER           0x00000300L
    #define BS_TOP              0x00000400L
    #define BS_BOTTOM           0x00000800L
    #define BS_VCENTER          0x00000C00L
    #define BS_PUSHLIKE         0x00001000L
    #define BS_MULTILINE        0x00002000L
    #define BS_NOTIFY           0x00004000L
    #define BS_FLAT             0x00008000L
    #define BS_RIGHTBUTTON      BS_LEFTTEXT
    #endif /* WINVER >= 0x0400 */

    找到所有的样式,里面在没有相应的设置,与GROUP相关的,只有一个 BS_GROUPBOX ,我试了一下,这个样式的意思,就是将按钮改造成一个GROUPBOX,而不是指定 GROUP.不对.  除此之外,就只能找上一层的样式也就是 CWnd的样式了.

    #define WS_OVERLAPPED       0x00000000L
    #define WS_POPUP            0x80000000L
    #define WS_CHILD            0x40000000L
    #define WS_MINIMIZE         0x20000000L
    #define WS_VISIBLE          0x10000000L
    #define WS_DISABLED         0x08000000L
    #define WS_CLIPSIBLINGS     0x04000000L
    #define WS_CLIPCHILDREN     0x02000000L
    #define WS_MAXIMIZE         0x01000000L
    #define WS_CAPTION          0x00C00000L     /* WS_BORDER | WS_DLGFRAME  */
    #define WS_BORDER           0x00800000L
    #define WS_DLGFRAME         0x00400000L
    #define WS_VSCROLL          0x00200000L
    #define WS_HSCROLL          0x00100000L
    #define WS_SYSMENU          0x00080000L
    #define WS_THICKFRAME       0x00040000L
    #define WS_GROUP            0x00020000L
    #define WS_TABSTOP          0x00010000L
    
    #define WS_MINIMIZEBOX      0x00020000L
    #define WS_MAXIMIZEBOX      0x00010000L
    
    
    #define WS_TILED            WS_OVERLAPPED
    #define WS_ICONIC           WS_MINIMIZE
    #define WS_SIZEBOX          WS_THICKFRAME
    #define WS_TILEDWINDOW      WS_OVERLAPPEDWINDOW
    
    

    里面果真有一个 WS_GROUP ,这就是我想要的,于是

    ((CButton*)GetDlgItem(IDC_CHECK1))->ModifyStyle(BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON | WS_GROUP, 0);

    至此 动态创建按钮组的方法也有了!

  • 相关阅读:
    PL/SQL不安装ORACLE客户端
    C#特性的学习(一)
    Centos运行Mysql因为内存不足进程被杀
    ASP.NET Core 新核心对象WebHost(一)
    ASP.NET Core轻松入门之Configure中IHostingEnvironment和IApplicationLifetime的使用
    Asp.Net Core轻松入门之WebHost的配置
    asp.net core轻松入门之MVC中Options读取配置文件
    ASP.NET Core轻松入门Bind读取配置文件到C#实例
    ASP.NET CORE入门之读取Json配置文件
    ASP.NET Core MVC中构建Web API
  • 原文地址:https://www.cnblogs.com/lujin49/p/4904906.html
Copyright © 2020-2023  润新知