|
其实MFC的单选控件radio button是可以通过关联成员变量来操控的,但是由于使用类向导有些代码是自动生成的,有时会出现莫名的错误。当然如果对MFC的机制很清楚,可以手动写代码关联。现在个人比较倾向于使用Cwnd的成员函数来操控单选控件。
一、设置Radio button控件选中不选中
IDC_RADIO1为控件的ID,如果需要设置IDC_RADIO1控制默认为选择或者不选中就需要在OnInitDialog()函数调用下面的函数。
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上
二、Radio button控件分组
每组的第一个单选按钮设置属性Group设置为true,从第1个Group属性为true的Radio button控件到下一个group属性为true的单选按钮的前一个单选按钮为一组(按照Tab顺序)。每一组可以设置一个成员变量与之关联。
三、用CWnd成员函数同时设置组和默认选中按钮
使用CWnd成员函数CheckRadioButton既可以设置组也可以同时设置默认选中项。
void CheckRadioButton( int nIDFirstButton, int nIDLastButton, intnIDCheckButton )
参数:
nIDFirstButton 指定组中第一个单选按钮的整数标识符。
nIDLastButton 指定组中最后一个单选按钮的整数标识符。
nIDCheckButton 指定了要选中的单选按钮的整数标识符。
说明:
从一组按钮中选择(加入检查标记)一个单选按钮并清除(清除检查标记)同组中其它单选按钮。CheckRadioButton函数向指定的单选按钮发送一条BM_SETCHECK消息。
四、获取单选按钮状态
调用类CWnd的成员函数GetCheckedRadioButton可以获取Radio button的状态
int GetCheckedRadioButton( int nIDFirstButton, int nIDLastButton )
第一个参数nIDFirstButton是同一组中的第一个单选钮控件的ID
第二个参数nIDLastButton是同一组中最后一个单选钮控件的ID
成员函数GetCheckedRadioButton返回指定组中第一个所选中的单选钮(在正常情况下仅应当有一个单钮被选中)的ID,如果没有按钮被选中,则返回0。这里需要注意的是,成员函数GetCheckedRadioButton被没有要求两个参数nIDFirstButton和nIDLastButton所指定的控件一定位于同一组中。
若干个单选钮是否属于同一组是以其Tab顺序来排定的,而GetCheckedRadioButton函数是以ID顺序来检查按钮的选定状态的。因此,如果传递给函数GetCheckedRadioButton的第一个参数的值大于第二个参数的值时,其返回值总是为0,而事实上,由这两个参数指定的单选钮的TAB顺序可能恰恰相反。因此,一般情况下我们应该尽量保证同一组单选钮的资源ID是连续递增的。通常这些资源ID是在头文件Resource.h中定义的。如果你同一组的单选钮不是一次创建的,那么它们的资源ID可能不是连续递增的,甚至可能是相反的。这时我们可以手动的修改资源头文件中的宏定义,以保证如GetCheckedRadioButton之类的成员函数得到正确的结果。
同时,这也说明一点,即使用GetCheck一个一个控件的检查各单选钮的选中状态要安全得多。
int i_check = ((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck();//获取IDC_RADIO1控件选择状态
返回值(i_check的值):
0 按钮处于未选中状态
1 按钮处于选中状态
2 按钮状态不定(仅当按钮风格为BS_3STATE或BS_AUTO3STATE时)如果按钮是其它风格,则返回0。
五、关联成员变量
强调一点Radio button控件要与int型变量相连前必须对其进行分组。关于Radio button和int型变量相连的方法就不多介绍了。
|
|