MFC中有多个checkbox控件变量时的简便操作
本人在用MFC写客户端界面时,需要用到多个checkbox控件,点击其中一个checkbox的时候,需要将其他的checkbox控件变灰,由于控件太多,博主在想能不能把对控件操作变简单,于是想到了用数组的形式去操作控件。
前言
所使用的控件:11个checkbox控件
一、checkbox控件在界面中的布局及控件变量的命名
图中,总共有11个checkbox控件
若用单个变量对控件变量声明时,需要用到11个变量,举个例子:
CButton m_filesize_5min;
CButton m_filesize_10min;
CButton m_filesize_15min;
.....(此次省略不是重点)
CButton m_filesize_24h;
二、使用变量数组的形式对控件变量进行声明
1.修改控件变量
使用变量数组的形式进行声明,举个例子:
//原先的变量声明为
CButton m_filesize_5min;
CButton m_filesize_10min;
CButton m_filesize_15min;
.....
CButton m_filesize_24h;
//现在的变量声明修改为
CButton m_file_size[11];
//同时在对话框的.cpp文件中需要修改DoDataExchange()函数
//博主的对话框.cpp文件名为CsetdataDlg.cpp
//原先的DoDataExchange()函数
//5分钟所对应的checkbox的ID为IDC_CHECK8,其变量命名为m_filesize_5min
void CSetdataDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CHECK8, m_filesize_5min);
.....
DDX_Control(pDX, IDC_CHECK18, m_filesize_24h);
}
//然后使用数组对其修改
//这就将IDC_CHECK8绑定到了m_file_size[0]上
void CSetdataDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CHECK8, m_file_size[0]);
.....
DDX_Control(pDX, IDC_CHECK18, m_file_size[10]);
}
2.控件消息
为了更好的说明其修改能成功,博主给IDC_CHECK8(5分钟)的那个控件添加点击的事件,当点击5分钟的checkbo控件时,将其他的控件变灰设置为不可点击
//消息函数的定义
//按下录音文件时长,5分钟
void CSetdataDlg::OnBnClickedCheck8()
{
// TODO: 在此添加控件通知处理程序代码
unsigned char ret = 0;
//获取checkbox控件的勾选状态
ret = m_file_size[0].GetCheck();
//若按下,checkbox前面会有一个√,然后将其他的控件变灰
if (ret == 1) {
Set_FileSize_ButtonState(0, 1);
}
//若取消选中,checkbox前面的√会取消,其他控件的会变里亮
else {
Set_FileSize_ButtonState(0, 0);
}
}
//Set_FileSize_ButtonState函数的内部为
//index为目前点击的控件(这里将IDC_CHECK8(5分钟)的index设置为0,其他的以此类推下去)
//state为显示的状态,state = 1时表明我点击了其中一个控件,其他的控件就要变灰,state = 0时,我把其中一个控件的√取消了,其他的控件就要变亮
void CSetdataDlg::Set_FileSize_ButtonState(unsigned char index, unsigned char state)
{
for (int i = 0; i < 11; i++) {
//由于已经点击了IDC_CHECK8的控件,所以我不能对已经点击打√的控件变灰,这里就需要使用continue跳过
if (i == index)
continue;
else {
if (state == 1)
m_file_size[i].EnableWindow(0);
else if(state == 0)
m_file_size[i].EnableWindow(1);
}
}
}
演示的效果
1.点击5分钟的那个控件时,其他的控件变灰
2.取消5分钟的那个控件时,全部显示
3.点击10分钟的那个控件时,其他的控件变灰