Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16498984
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:01:52

下载本文示例代码
  单选钮用来表示一系列的互斥选项,这些互斥项常常被分成若干个组,每组仅允许用户选择一个选项;复选框与单选按钮相象,不同之处是复选框代表多重选择,用户可以选择一个或多个选项。   对话框编辑器中各组控件的对齐  按下Ctrl键并单击要对齐的各个控件,同时选中。最后选中的控件是对齐的基准,仔细观察,它周围的8个小方框是实心的,而其它被选控件周围的小方框是空心的。  在Layout菜单中选择Make Same Size的Both,可以统一控件尺寸,所选控件尺寸与基准控件相同。在Layout菜单中选择Align的Left,可以使所有被选控件的左边与基准控件对齐。选择Layout菜单中Align的Space Evenly的Down,可以使被选控件垂直间距相等。   单选按钮和复选框的使用  为了方便说明,我们假定创建了基于对话框的MFC应用程序,工程名为RadioAndCheckButton。对话框资源加入两个组框 ,第一个组框‘性别’,内有‘男’,‘女’两个单选钮;第二个组框是‘爱好’,内有‘足球’‘排球’‘蓝球’三个复选框,如下表: 控件类型 ID 标题(Caption) 其它属性 组框 缺省 性别 缺省 单选钮 IDC_SEX1 男 Group 单选钮 IDC_SEX2 女 缺省 组框 缺省 爱好 缺省 复选框 IDC_HOBBY1 足球 缺省 复选框 IDC_HOBBY2 排球 缺省 复选框 IDC_HOBBY3 蓝球 缺省   设置控件的Tab Order  单击Layout菜单下的Tab Order命令,设置控件的TAB键顺序(Tab Order),保证单选钮的Tab Order连续。  以Tab Order为序,从Group属性为真的控件开始(包括该控件),到下一个Group属性为真的控件结束(不包括该控件),所有的这些控件将组成一个组。对于单选钮,同一组内同时只能有一个处于被选中状态。对于由资源编辑器生成的单选按钮控件,在默认情况由Windows自动处理同组控件之间的互斥关系。  具体使用单选钮和复选框   1、调用 CButton的成员函数SetCheck设置单选钮和复选框的选中状态。该成员函数带有一个类型为整形的参数,该参数为0表示清除选中按钮的选中状态,参数为1表示设置选中按钮的选中状态。参数为2表示把三态复选框设为不确定状态。  复选框的Tristate属性:创建三态复选框。除了处于“选中”和“不选中”状态外,三态复选框还可以处于变灰状态。通常,复选框的变灰状态表示其选中状态不确定。在很多软件的安装程序中,变灰往往表示仅选中该组件的一部分。  注意,如果我们在程序中调用SetCheck设置同一组中某一单选钮为选中状态,并不意味着同时清除同一组中其它单选钮的选中状态。否则,将导致同一组中的两个按钮同时处于选中状态。这是应该避免的。因此,如果我们通过代码改变了单选钮的选中状态,一定要记得同时清除同组的其它单选钮的选中状态。  2、调用 CButton的成员函数GetCheck返回单选钮的选中状态。该函数的函数原型是int GetCheck( ) const;  返回值可以是0、1、2,分别代表按钮处于未选中状态、选中状态或中间状态(对三态复选框而言)。  3、调用类CWnd的成员函数GetCheckedRadioButton返回同一组单选钮中哪一个被选中。该成员函数原型如下:int GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton);  第一个参数nIDFirstButton是同一组中的第一个单选钮控件的ID,nIDLastButton是同一组中最后一个单选钮控件的ID。成员函数GetCheckedRadioButton返回指定组中所选中的单选钮的ID,如果没有按扭被选中,则返回0。  注意,若干个单选钮是否属于同一组是以其Tab顺序来排定的,而GetCheckedRadioButton函数是以ID顺序来检查按钮的选定状态的。因此,如果传递给函数GetCheckedRadioButton的第一个参数的值大于第二个参数的值时,其返回值总是为0,而事实上由这两个参数指定的单选钮的Tab顺序可能恰恰相反。因此,一般情况下我们应该尽量保证同一组单选钮的资源ID是连续递增的。通常这些资源ID是在头文件Resource.h中定义的。如果你同一组的单选钮不是一次创建的,那么它们的资源ID可能不是连续递增的,甚至可能是相反的。我们可以手动的修改资源头文件中的宏定义,以保证GetCheckedRadioButton函数得到正确的结果。  例: UINT nSex=GetCheckedRadioButton(IDC_SEX1,IDC_SEX2); Switch(nSex) { Case IDC_SEX1: ; ……   4、使用ClassWizard为单选钮或复选框添加变量,来使用单选钮或复选框  一般,一组单选按钮的第一个属性选中Group,注意,只有选中Group属性的单选钮的ID 才能在ClassWizard中添加变量。  在对话框类给一组单选钮加入一个成员变量,单选钮(组中的第一个按钮)的数据变量类型是int,0表示选择了组中的第一个单选钮,1表示选择了第二个,-1表示没有一个被选中。例如:给单选钮IDC_SEX1添加int型变量m_nSex,并在执行文件中加入如下代码:…… UpdateData(TRUE); if(m_nSex==0) //选中‘男’ ; else if(m_nSex==1) //选中‘女’ ; else ; ……   复选框的数据变量类型是BOOL,TRUE表示选中,FALSE表示未选中。例如:给复选框IDC_HOBBY1添加BOOL型变量m_hobby1,并在执行文件中加入如下代码:…… m_hobby1=TRUE; UpdateData(FALSE); ……   5、使用消息映射宏ON_CONTROL_RANGE  单选钮和复选框都可以响应BN_CLICKED消息,如果一组中有多个单选钮,分别创建消息处理函数就比较麻烦了,利用MFC的消息映射宏ON_CONTROL_RANGE可以避免这种麻烦,该映射宏把多个ID连续的控件发出的消息映射到同一个处理函数上,这样,我们只要编写一个消息处理函数就可以对一组单选钮的BN_CLICKED消息作出响应,ClassWizard不支持该宏,必须手工创建。  ON_CONTROL_RANGE消息映射宏的第一个参数是控件消息码,第二和第三个参数分别指明了一组连续的控件ID中的头一个和最后一个ID,最后一个参数是消息处理函数名。注意,起始、 终止ID号必须是连续的,如果不能确定该组控件的ID是否是连续,请用View->Resource Symbols…命令检查控件的ID值,如果发现两个ID是不连续的,读者可以改变对ID的定义值使之连续,但要注意改动后的值不要与别的ID值发生冲突。  在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP之间 //}}AFX_MSG_MAP之后加入ON_CONTROL_RANGE(BN_CLICKED,IDC_SEX1,IDC_SEX2,OnSexClicked)   然后在对话框类的头文件的AFX_MSG 块中声明消息处理函数,…… //{{AFX_MSG(CMyView) …… //}}AFX_MSG  afx_msg void OnSexClicked (UINT nCmdID);  DECLARE_MESSAGE_MAP() ……  最后,在对话框类所在CPP文件的最后插入消息处理函数,如下所示:CRadioAndCheckButtonDialog:: OnSexClicked,  void CRadioAndCheckButtonDialog:: OnSexClicked (UINT nCmdID)    {  …… switch(nID) { case IDC_SEX1: AfxMessageBox("IDC_SEX1"); break; case IDC_SEX2: AfxMessageBox("IDC_SEX2"); break; …… }     6、使用IsDlgButtonChecked 函数判断单选钮或复选框是否被选中  CWnd::IsDlgButtonChecked函数,用来判断单选按钮或检查框是否被选择,该函数的声明为UINT IsDlgButtonChecked(int nIDButton) const;   参数nIDButton为按钮的ID。若按钮被选择,则函数返回1,否则返回0,若按钮处于不确定状态,则返回值为2。……  if(IsDlgButtonChecked(IDC_SEX1))  ……   以上是使用单选钮和复选框最常用的几种方法。   单选钮用来表示一系列的互斥选项,这些互斥项常常被分成若干个组,每组仅允许用户选择一个选项;复选框与单选按钮相象,不同之处是复选框代表多重选择,用户可以选择一个或多个选项。   对话框编辑器中各组控件的对齐  按下Ctrl键并单击要对齐的各个控件,同时选中。最后选中的控件是对齐的基准,仔细观察,它周围的8个小方框是实心的,而其它被选控件周围的小方框是空心的。  在Layout菜单中选择Make Same Size的Both,可以统一控件尺寸,所选控件尺寸与基准控件相同。在Layout菜单中选择Align的Left,可以使所有被选控件的左边与基准控件对齐。选择Layout菜单中Align的Space Evenly的Down,可以使被选控件垂直间距相等。   单选按钮和复选框的使用  为了方便说明,我们假定创建了基于对话框的MFC应用程序,工程名为RadioAndCheckButton。对话框资源加入两个组框 ,第一个组框‘性别’,内有‘男’,‘女’两个单选钮;第二个组框是‘爱好’,内有‘足球’‘排球’‘蓝球’三个复选框,如下表: 控件类型 ID 标题(Caption) 其它属性 组框 缺省 性别 缺省 单选钮 IDC_SEX1 男 Group 单选钮 IDC_SEX2 女 缺省 组框 缺省 爱好 缺省 复选框 IDC_HOBBY1 足球 缺省 复选框 IDC_HOBBY2 排球 缺省 复选框 IDC_HOBBY3 蓝球 缺省   设置控件的Tab Order  单击Layout菜单下的Tab Order命令,设置控件的TAB键顺序(Tab Order),保证单选钮的Tab Order连续。  以Tab Order为序,从Group属性为真的控件开始(包括该控件),到下一个Group属性为真的控件结束(不包括该控件),所有的这些控件将组成一个组。对于单选钮,同一组内同时只能有一个处于被选中状态。对于由资源编辑器生成的单选按钮控件,在默认情况由Windows自动处理同组控件之间的互斥关系。  具体使用单选钮和复选框   1、调用 CButton的成员函数SetCheck设置单选钮和复选框的选中状态。该成员函数带有一个类型为整形的参数,该参数为0表示清除选中按钮的选中状态,参数为1表示设置选中按钮的选中状态。参数为2表示把三态复选框设为不确定状态。  复选框的Tristate属性:创建三态复选框。除了处于“选中”和“不选中”状态外,三态复选框还可以处于变灰状态。通常,复选框的变灰状态表示其选中状态不确定。在很多软件的安装程序中,变灰往往表示仅选中该组件的一部分。  注意,如果我们在程序中调用SetCheck设置同一组中某一单选钮为选中状态,并不意味着同时清除同一组中其它单选钮的选中状态。否则,将导致同一组中的两个按钮同时处于选中状态。这是应该避免的。因此,如果我们通过代码改变了单选钮的选中状态,一定要记得同时清除同组的其它单选钮的选中状态。  2、调用 CButton的成员函数GetCheck返回单选钮的选中状态。该函数的函数原型是int GetCheck( ) const;  返回值可以是0、1、2,分别代表按钮处于未选中状态、选中状态或中间状态(对三态复选框而言)。  3、调用类CWnd的成员函数GetCheckedRadioButton返回同一组单选钮中哪一个被选中。该成员函数原型如下:int GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton);  第一个参数nIDFirstButton是同一组中的第一个单选钮控件的ID,nIDLastButton是同一组中最后一个单选钮控件的ID。成员函数GetCheckedRadioButton返回指定组中所选中的单选钮的ID,如果没有按扭被选中,则返回0。  注意,若干个单选钮是否属于同一组是以其Tab顺序来排定的,而GetCheckedRadioButton函数是以ID顺序来检查按钮的选定状态的。因此,如果传递给函数GetCheckedRadioButton的第一个参数的值大于第二个参数的值时,其返回值总是为0,而事实上由这两个参数指定的单选钮的Tab顺序可能恰恰相反。因此,一般情况下我们应该尽量保证同一组单选钮的资源ID是连续递增的。通常这些资源ID是在头文件Resource.h中定义的。如果你同一组的单选钮不是一次创建的,那么它们的资源ID可能不是连续递增的,甚至可能是相反的。我们可以手动的修改资源头文件中的宏定义,以保证GetCheckedRadioButton函数得到正确的结果。  例: UINT nSex=GetCheckedRadioButton(IDC_SEX1,IDC_SEX2); Switch(nSex) { Case IDC_SEX1: ; ……   4、使用ClassWizard为单选钮或复选框添加变量,来使用单选钮或复选框  一般,一组单选按钮的第一个属性选中Group,注意,只有选中Group属性的单选钮的ID 才能在ClassWizard中添加变量。  在对话框类给一组单选钮加入一个成员变量,单选钮(组中的第一个按钮)的数据变量类型是int,0表示选择了组中的第一个单选钮,1表示选择了第二个,-1表示没有一个被选中。例如:给单选钮IDC_SEX1添加int型变量m_nSex,并在执行文件中加入如下代码:…… UpdateData(TRUE); if(m_nSex==0) //选中‘男’ ; else if(m_nSex==1) //选中‘女’ ; else ; ……   复选框的数据变量类型是BOOL,TRUE表示选中,FALSE表示未选中。例如:给复选框IDC_HOBBY1添加BOOL型变量m_hobby1,并在执行文件中加入如下代码:…… m_hobby1=TRUE; UpdateData(FALSE); ……   5、使用消息映射宏ON_CONTROL_RANGE  单选钮和复选框都可以响应BN_CLICKED消息,如果一组中有多个单选钮,分别创建消息处理函数就比较麻烦了,利用MFC的消息映射宏ON_CONTROL_RANGE可以避免这种麻烦,该映射宏把多个ID连续的控件发出的消息映射到同一个处理函数上,这样,我们只要编写一个消息处理函数就可以对一组单选钮的BN_CLICKED消息作出响应,ClassWizard不支持该宏,必须手工创建。  ON_CONTROL_RANGE消息映射宏的第一个参数是控件消息码,第二和第三个参数分别指明了一组连续的控件ID中的头一个和最后一个ID,最后一个参数是消息处理函数名。注意,起始、 终止ID号必须是连续的,如果不能确定该组控件的ID是否是连续,请用View->Resource Symbols…命令检查控件的ID值,如果发现两个ID是不连续的,读者可以改变对ID的定义值使之连续,但要注意改动后的值不要与别的ID值发生冲突。  在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP之间 //}}AFX_MSG_MAP之后加入ON_CONTROL_RANGE(BN_CLICKED,IDC_SEX1,IDC_SEX2,OnSexClicked)   然后在对话框类的头文件的AFX_MSG 块中声明消息处理函数,…… //{{AFX_MSG(CMyView) …… //}}AFX_MSG  afx_msg void OnSexClicked (UINT nCmdID);  DECLARE_MESSAGE_MAP() ……  最后,在对话框类所在CPP文件的最后插入消息处理函数,如下所示:CRadioAndCheckButtonDialog:: OnSexClicked,  void CRadioAndCheckButtonDialog:: OnSexClicked (UINT nCmdID)    {  …… switch(nID) { case IDC_SEX1: AfxMessageBox("IDC_SEX1"); break; case IDC_SEX2: AfxMessageBox("IDC_SEX2"); break; …… }     6、使用IsDlgButtonChecked 函数判断单选钮或复选框是否被选中  CWnd::IsDlgButtonChecked函数,用来判断单选按钮或检查框是否被选择,该函数的声明为UINT IsDlgButtonChecked(int nIDButton) const;   参数nIDButton为按钮的ID。若按钮被选择,则函数返回1,否则返回0,若按钮处于不确定状态,则返回值为2。……  if(IsDlgButtonChecked(IDC_SEX1))  ……   以上是使用单选钮和复选框最常用的几种方法。 下载本文示例代码


VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮VC 6.0中使用复选框和单选钮
阅读(115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~