这段时间忙着升级软件,没来得及更新文章。望见谅!说实话,在别人的软件源代码基础上,升级软件,这还真是不容易,刚开始看源代码理解整个软件的运行机制,真是头晕。升级软件过程中,加入的代码,放哪又是个问题。总而言之,头晕。说到底,还是自己能力不够,写起来才这么费力。哎.....
    废话不说了,我们看下,昨晚我钻研很久的单选按钮控件的相关心得。我们知道,当我们选择了一个以上的单选按钮时,我们需要将它设置为一组,否则跟复选框有区别吗?(个人理解)。但是,昨晚在设置单选按钮时,遇到点问题。是这样的,我选择了几个单选按钮后,选为一组,关联了变量,结果运行后直接给我默认选上了,我可不需要默认,查来查去,没找着能取消默认的属性选项,后来,我就想用代码来取消默认,最后还是不行。好吧,我不信邪,继续百度,最后终于找到了,原来这个默认取消不了,额...顿时整个人不好了。后来我重新选择了单选按钮,想着默认就默认吧,但是这次我没有关联变量,一运行,好家伙,没有了默认选项,这次我的步骤和之前的一样,就是没有关联变量而已,就给我取消了默认。好吧,无心插柳柳成荫。

    列出几个继承自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()等也可以用来获取或设置按钮中显示的文本。