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))
……
以上是使用单选钮和复选框最常用的几种方法。
评论