编程环境:VS2013,MFC
转自
https://blog.csdn.net/c_cyoxi/article/details/23868979
https://blog.csdn.net/mengwang024/article/details/41252623
https://blog.csdn.net/LXL110306/article/details/80596857
分组 RadioButton 用法
1 分组
将radio1、radio2、radio3分为1组,radio4、radio5分为另一组;
方法:设置 radio1 的 属性: group、tabstop、auto均为true
设置 radio2 的 属性: group设为false, tabstop、auto均为true
设置 radio3 的 属性:group设为false, tabstop、auto均为true
设置 radio4 的 属性: group、tabstop、auto均为true
设置 radio5 的 属性: group设为false,tabstop、auto均为true
2
CTRL+D,保证同一组内的radio的tab序号是连续的;调整tab序号的方式是:鼠标点击数字,比如先点3,然后点7,则3和7会交换,即radio1变为7,radio5变为3;
3 关联int型变量
注意:只需将group属性为true的radio1关联,radio2和radio3无需关联; 同样,radio4需关联,radio5无需关联
4
第4步完成后,在窗体头文件中可以看到
构造函数:
默认第一个radio被选中,即radio1被选中
5 事件处理
设置radio1的事件
设置radio2和radio3的点击事件函数 和 radio1 相同
事件代码:
注意:updatedata(true) 不能少; 它的作用是 将radio的状态值更新给关联的变量,即m_radiobtngroup1;
备注:
(1)对一组单选按钮来说,需要设置该组第一个单选按钮Group属性,然后才能在类向导里看到单选按钮的ID并为其关联变量。
(2)初始化时可设置关联变量的值选择默认选中按钮。-1表示未选中任何按钮。
(3)资源视图下,格式->Tab键顺序,依次点击控件可改变Tab键顺序。
修改Radio Button 的背景色以及文字颜色
在Radio Button的所在窗口添加CTLCOLOR事件.
在响应函数中添加如下代码:
HBRUSH CPZVguiShapeDisplaySettingAllDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
TCHAR szClassName[MAX_PATH]={0};
::GetClassName(pWnd->m_hWnd, szClassName, sizeof(szClassName)/sizeof(TCHAR)-2);
if (lstrcmpi(szClassName,_T("Button")) == 0)
{
UINT uStyle = ((CButton*)pWnd)->GetButtonStyle( );
switch(uStyle)
{
case BS_AUTORADIOBUTTON:
{
static HBRUSH hbrSatic = ::CreateSolidBrush(RGB(255, 255, 255));//背景颜色
pDC->SetBkMode(TRANSPARENT);
pDC-> SetTextColor(RGB(0, 0, 0)); //字体颜色
return hbrSatic;
}
break;
default:
break;
}
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
以上是改变了所有Radio Buttond的背景颜色和字体颜色.
如果只是单纯需要改变几个而已.则把switch中的变量变为需要修改的ID即可.
即:
UINT uId = ((CButton*)pWnd)->GetDlgCtrlID();
switch(uId)
{
case: ID_RADIO_BUTTON1
}
m_radio控件变量
按钮不可用(变灰) m_radio. EnableWindow (0);
按钮可用 m_radio. EnableWindow (1);
按钮不显示 (消失) m_radio.ShowWindow (0);
按钮显示 出现 m_radio.ShowWindow (0);
((CButton*)GetDlgItem(IDC_RADIO1))->EnableWindow(1);