废话不说了,我们看下,昨晚我钻研很久的单选按钮控件的相关心得。我们知道,当我们选择了一个以上的单选按钮时,我们需要将它设置为一组,否则跟复选框有区别吗?(个人理解)。但是,昨晚在设置单选按钮时,遇到点问题。是这样的,我选择了几个单选按钮后,选为一组,关联了变量,结果运行后直接给我默认选上了,我可不需要默认,查来查去,没找着能取消默认的属性选项,后来,我就想用代码来取消默认,最后还是不行。好吧,我不信邪,继续百度,最后终于找到了,原来这个默认取消不了,额...顿时整个人不好了。后来我重新选择了单选按钮,想着默认就默认吧,但是这次我没有关联变量,一运行,好家伙,没有了默认选项,这次我的步骤和之前的一样,就是没有关联变量而已,就给我取消了默认。好吧,无心插柳柳成荫。
列出几个继承自CWnd类的成员函数,通过它们获取或设置按钮控件的状态非常方便,只需要知道按钮的ID。
void CheckDlgButton(int nIDButton,UINT nCheck);
用来设置按钮的选择状态。参数nIDButton指定了按钮的ID。nCheck的值为0表示按钮未被选择,为1表示按钮被选择,为2表示按钮处于不确定状态(仅用于复选框)。UINT IsDlgButtonChecked(int nIDButton) const;
返回复选框或单选按钮的选择状态。返回值为0表示按钮未被选择,为1表示按钮被选择,为2表示按钮处于不确定状态(仅用于复选框)。
void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);
用来选择组中的一个单选按钮。参数nIDFirstButton指定了组中第一个按钮的ID,nIDLastButton指定了组中最后一个按钮的ID,nIDCheckButton指定了要选择的按钮的ID。int GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);
用来获得一组单选按钮中被选中按钮的ID。参数nIDFirstButton 说明了组中第一个按钮的ID,nIDLastButton 说明了组中最后一个按钮的ID。
以下是MFC的实现,循环迭代,找出被check的button。有时我们可以通过查看MFC的实现来学习具体函数。
int CWnd::GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton) const
{
for (int nID = nIDFirstButton; nID <= nIDLastButton; nID++)
{
if (IsDlgButtonChecked(nID))
return nID; // id that matched
}
return 0; // invalid ID
}
如何让Radio1或者Radio2默认选上?如何知道哪个被选上了?关键是选上,“默认”只要放在OnInitDialog()即可。
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上
如何初始化单选按钮,即默认一个单选按钮 初始化第一个单选按选,即默认第一个单选按钮
CLotteryDlg::OnInitDialog()
CButton *pB;
pB=(CButton*)GetDlgItem(IDC_RADIO1);
pB->SetCheck(TRUE);
被分到一组里的单选框是互斥的,不在一个组里的单选框是互不影响的(组框里的单选框只能一个被选中)另外,CWnd类的成员函数GetWindowText()、SetWindowText()等也可以用来获取或设置按钮中显示的文本。