对于复选框个数不多的情况下可以使用如下:
设置
((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(TRUE);
读取
DWORD dwState = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();
或者:
有三个Check box,想对各种情况(被选中或未被选中)进行判断,做出不同的操作。
三个Check box 是:IDC_CHECK1/2/3
分别给它们的控制变量是 m_Check1/2/3
CButton* m_Check1 = (CButton*)m_wndDlg.GetDlgItem(IDC_CHECK1);
CButton* m_Check2 = (CButton*)m_wndDlg.GetDlgItem(IDC_CHECK2);
CButton* m_Check3 = (CButton*)m_wndDlg.GetDlgItem(IDC_CHECK3);
if(m_Check1.GetCheck() == BST_UNCHECKED)
m_Check1.SetCheck(BST_CHECKED);
else
m_Check1.SetCheck(BST_UNCHECKED);
如果有很多复选框并且对复选框的处理都一样,则应使用消息映射宏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值发生冲突。
首先在C***Dlg.cpp中的消息映射中加入
BEGIN_MESSAGE_MAP(CInitCoach, CDialog)
//{{AFX_MSG_MAP(CInitCoach)
……
ON_CONTROL_RANGE(BN_CLICKED,IDC_CHECK1,IDC_CHECK6,OnCoachNoChecked)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
然后在对话框类的头文件的AFX_MSG 块中声明消息处理函数
//{{AFX_MSG(CMyView)
……
afx_msg void OnCoachNoChecked(UINT nCmdID);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
最后,在对话框类所在CPP文件的最后插入消息处理函数,如下所示:
void CInitCoach::OnCoachNoChecked(UINT nCmdID)
{
CString ss;
ss.Format("%d",nCmdID);
MessageBox(ss);
}
出处:http://www.vckbase.com/document/viewdoc/?id=1679
http://blog.ednchina.com/cbqcgq/18619/message.aspx
另外:
http://blog.csdn.net/Sephoenix/archive/2009/03/19/4004817.aspx
多个复选框进行相同的处理,写入数据库示例:
测试按钮对应代码:
void CInitCoach::OnBtnTest()
{
// TODO: Add your control notification handler code here
// DWORD dwState = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();
// if (1==dwState)
// {
// CString aa;
// GetDlgItem(IDC_CHECK1)->GetWindowText(aa);
// MessageBox(aa);
// }
CString strSQL;
CDBOperation predDB;
predDB.InitDB();
for (UINT nCmdID=1055;nCmdID<=1060;nCmdID++)
{
if(((CButton*)GetDlgItem(nCmdID))->GetCheck()==BST_CHECKED)
{
int predCoachNo=nCmdID-1045;
strSQL.Format("insert into coachpred values(%d)",predCoachNo);
predDB.ExecuteSQL(strSQL);
}
}
predDB.ReleaseDB();
}
重新发车按钮对应代码:
void CInitCoach::OnBtnReout()
{
// TODO: Add your control notification handler code here
CDBOperation dePredDB;
dePredDB.InitDB();
dePredDB.ExecuteSQL("delete from coachpred");
dePredDB.ReleaseDB();
}