使用图形界面时我们经常会碰到一些选项,如果是多选就是Check Box可以同时选多个内容,单选的话就是Radio Button.
Check Box用法简介
check box一般是绑定到一个布尔变量.
BOOL m_bShowAll;
DDX_Check(pDX,IDC_CHECK_SHOW_ALL,m_bShowAll);
m_bShowAll = FALSE; //表示没选
m_bShowAll = TRUE;//表示选择
UpdateData(FALSE); //更改了m_bShowAll的值后记得调用下这函数来更新页面上的显示.反过来如果更改了页面上的check box选项要通过UpdateData();来更新m_bShowAll的值.
通过函数直接来操作
设置是checkbox状态
((CButton*)GetDlgItem(IDC_CHECK_SHOW_ALL))->SetCheck(BST_CHECKED);//设置为选择上,如果不选则是BST_UNCHECKED,要是还设为Tri_state设为未这状态就是BST_INDETERMINATE
获取checkbox状态
方法1
int ret = ((CButton*)GetDlgItem(IDC_CHECK_SHOW_ALL))->GetCheck(); //0为没选上,1为选上.未这状态为2.在者对应的宏分别是
BST_CHECKED, BST_UNCHECKED, BST_INDETERMINATE (未定状态只有在checkbox属性Tri_state设为true时才有
方法2
int ret = IsDlgButtonChecked(IDC_CHECK_SHOW_ALL); //选上返回1,未选返回0,未定状态返回2
消息处理
当然了有时如果在选上了check box后要做些啥操作的话一般要写下它对应的消息处理函数.
afx_msg void OnBnClickedCheckShowAll();
ON_BN_CLICKED(IDC_CHECK_SHOW_ALL, OnBnClickedCheckShowAll)
void CCheckTest::OnBnClickedCheckShowAll(){
//添加要处理的相应操作
}
Radio Buton
绑定变量时用DDX_Radio
它跟check box类似,只不过它表示单选.一次只能选一个.当其中一个选上时会自动让其他的不选上.
Radio Button的使用中最令人迷糊的就是分组的使用.
未分组的使用
如果所有radio button的属性设置中group都是False,这种情况是最简单.
如果你在页面中直接选的话,选上一个后另外的会自动变为未选.但是radio button如果像上面check box一样使用SetCheck来设置.那可能会出现两个同时选上的情况.所以得显式的去让其他的变为未选.
当然如果只是两三个选项你手动写代码实现也没啥,但如果来个几十个,那就会让你头晕的.
分组的使用
先来说下Tab顺序
一般的如果页面上有很多控件,我们最好给它们排个序,按下Ctrl + D,每个控件上会显示一个数字出来.你可以改变那些数字顺序.确定了这些顺序后.你以后可以通过Tab键来按顺序切换到不同的控件以获得焦点.
分成一组
假如有4个radio button,把tab顺序排一位的(假设是IDC_RADIO_SEL属性设:groupt为True,Auto为True,TabStop为True.然后后面三个radio button的group全设为False.
IDC_RADIO_SEL绑定一个int类型变量,m_nSelection,一般在构造函数中把它初始化为0,表示分组中的第一个button选上.m_nSelection如果为1,2,3则代表后面三个button哪一个被选上.
分成多组
分组是这样分的,从第一个radio button的group设为True的开始按Tab顺序往后找,再次碰到group为True就是表示一组的结束,另外一组的开始.所以假如有R1,R2,R3,R4这4个radio button的话.想把R1,R2分一组,另两个一组则可以这样
先排好Tab顺序,然后把R1的group设为True,R2的为False
R3的group设为True,R4的为False.
然后把R1绑定变量m_nOne;
R2绑定变量m_nTwo
消息处理
跟check box一样,都是ON_BN_CLICKED(ID_XXXX,FunXXX)这样指定一个回调函数.跟Button的消息处理也完全一样.