2.2 复选框和单选按钮的使用实例
程序员文章站
2022-05-09 10:56:02
...
复选框和单选按钮都用于在界面上显示一些选项供用户选择,界面上的复选框可以随意选择或取消选择,而处于同一组的单选按钮,同时只能有一个处于选中状态,当一个单选按钮变成选择状态时,其同组中之前选中的控件将自动清除选择状态;
2.2.1 技术要点:
- 和按钮控件一样,复选框和单选按钮在单击时都会发出 BN_ CLICKED 消息;
- 实际上,复选框和单选框按钮本身就是按钮控件,只是比普通按钮控件多了“BS_ CHECKBOX ”、“BS_ RADIOBUTTON ”等风格,使得其功能和外观不同于普通按钮;
- 在 MFC 中,对这两种控件的封装都是 CButton 类;
…
2.2.2 实例步骤:
本实例通过一个三基色测试程序,演示复选框控件和单选控件的使用方法。实例步骤如下:
- 新建一个基于对话框的 MFC 应用程序,项目名称为“CheckBoxDemo”;
- 在主对话框上添加3个复选框控件,将其ID分别修改为“IDC_ CHK_ RED”、“IDC_ CHK_ GREEN”和“IDC_ CHK_ BLUE”。文本属性分别修改为“红”、“绿”和“蓝”;
- 在主对话框上添加两个单选按钮控件,将其 ID 分别修改为“ IDC_ RD_ RECT”和“ IDC_ RD_ ROUND”,文本属性分别修改为“矩形”和“圆形”。添加控件后,选中“IDC_ RD_ RECT”的“Group”属性。注意在添加控件时要连续按照顺序添加,以保证其 ID 的连续性;
- 在对话框中单击鼠标右键,并单击弹出菜单中的“ClassWizard”项,打开类向导。在类向导中选择“Member Variables”选项卡,在“Control IDs”列表框中选中“IDC_ CHK_ BLUE”。单击“Add Variable”按钮,将弹出添加变量对话框,在“Member variable name”文本框中输入变量名称“m_ chk_ blue”,并将“Category”下拉框的选项修改为“Control”,单击“OK”按钮为控件添加控件型变量;
- 重复上诉步骤,为对话框上的所有复选框的单选框按钮添加控件型变量,添加变量后的类向导界面如图;
- 再通过类向导为主对话框添加“WM_ ERASEBKGND”消息的响应函数。注意要先将类向导中“Class Info”标签页中的“Message filter”修改为“Window”,才能在“Message Maps”标签页中看到该消息;
函数代码如下所示:
//WM_ERASEBKGND消息的响应函数
BOOL CCheckBoxDemoDlg::OnEraseBkgnd(CDC* pDC)
{
//先绘制默认背景
BOOL bRet = CDialog::OnEraseBkgnd(pDC);
//获取复选框控件所选的颜色
int nRed, nGreen, nBlue;
nRed = m_chk_red.GetCheck() ? 255 : 0;
nGreen = m_chk_green.GetCheck() ? 255 : 0;
nBlue = m_chk_blue.GetCheck() ? 255 : 0;
//根据选择组成颜色
COLORREF crFore = RGB(nRed, nGreen, nBlue);
//创建指定颜色的画刷
CBrush brush;
brush.CreateSolidBrush(crFore);
//将画刷选入DC
CBrush *pOldBrush = pDC->SelectObject(&brush);
//根据选择,绘制矩形或圆形
RECT rc = {50, 20, 150, 120};
if(m_rd_rect.GetCheck())
pDC->Rectangle(&rc);
else
pDC->Ellipse(&rc);
//恢复DC原状
pDC->SelectObject(pOldBrush);
return bRet;
}
通过类向导,为主对话框上的所有复选框和单选按钮添加单击事件的响应函数,函数代码如下:
//界面上的单选按钮和复选框的单击事件响应函数
void CCheckBoxDemoDlg::OnChkBlue()
{
//选项改变时,让对话框重绘
Invalidate();
}
//其余控件均采用相同的处理代码
void CCheckBoxDemoDlg::OnChkGreen()
{
OnChkBlue();
}
void CCheckBoxDemoDlg::OnChkRed()
{
OnChkBlue();
}
void CCheckBoxDemoDlg::OnRdRect()
{
OnChkBlue();
}
void CCheckBoxDemoDlg::OnRdRound()
{
OnChkBlue();
}
在主对话框的 OnInitDialog 事件中添加如下所示的初始化代码:
BOOL CCheckBoxDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
//默认选择“圆形”单选按钮
CheckRadioButton(IDC_RD_RECT, IDC_RD_ROUND, IDC_RD_ROUND);
return TRUE; // return TRUE unless you set the focus to a control
}
2.2.3 程序运行:
按 F5 键运行程序,修改界面上的选项,程序就会自动在界面上绘制出指定颜色的图形:
2.2.4 源程序解读:
- 通过本节实例,读者可以掌握给对话框上的控件添加变量的方法。变量有两种类型,一种是控件变量,通过该变量可以访问和控制控件的所有属性。另一种是数值型变量,通过该变量可以方便地访问控件的值,但无法访问更多属性;
- 一组单选按钮控件在对话框上必须具有连续的ID,并且这组控件中的第一个选中了“Group”属性,这样这组控件就具有了互斥特性,以保证同时只有一个能被选中;
上一篇: 【HIVE】(四)数据导入/导出
推荐阅读
-
mui开发中获取单选按钮、复选框的值(实例讲解)
-
使用AngularJS处理单选框和复选框的简单方法
-
PySider2 中单选按钮QRadioButton 和按钮组QButtonGroup的使用、单选框的实现
-
自学篇之js 提取复选框和单选框的值 和纯css的3D按钮_html/css_WEB-ITnose
-
Vue中的vxe-table教程14-图标、按钮、单选框组、复选框组、开关按钮的使用
-
js实现iPhone界面风格的单选框和复选框按钮实例_javascript技巧
-
20个时尚的自定义CSS复选框和单选按钮_html/css_WEB-ITnose
-
js使用DOM设置单选按钮、复选框及下拉菜单的方法_javascript技巧
-
js使用DOM设置单选按钮、复选框及下拉菜单的方法_javascript技巧
-
c#中单选按钮和复选框的使用