博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++ 动态生成 成组的 RadioButton 按钮组
阅读量:7098 次
发布时间:2019-06-28

本文共 3099 字,大约阅读时间需要 10 分钟。

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

单选按钮也属于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);

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

转载于:https://www.cnblogs.com/lujin49/p/4904906.html

你可能感兴趣的文章
HCE Benchmark
查看>>
设置基于Windows策略的QOS
查看>>
配置Linux日志文件
查看>>
黑客攻防专题三:名词介绍
查看>>
吐槽一下现在的代码编辑器
查看>>
笔记—TCP有限状态机分析
查看>>
网络发现自动关闭不能启用、无法启用文件和打印共享的解决办法
查看>>
SSMA迁移本地的MY SQL到本地SQL server及windows azure SQL Databaase
查看>>
分享Silverlight/WPF/Windows Phone一周学习导读(06月06日-06月11日)
查看>>
Django进阶之中间件
查看>>
angularjs 过滤器filter
查看>>
puppet之文件管理
查看>>
Wi-Fi搞不清?五问五答一看就明
查看>>
配置Configuration Manager站点和层次架构(2)
查看>>
Cognos Schedule stops working
查看>>
键盘谍影 键盘监视器的原理和防范
查看>>
配置交换机etherchannel
查看>>
活力四射的Windows Embedded Standard 7
查看>>
了解区块链,从挖矿开始
查看>>
【Java学习笔记】java.lang包学习
查看>>