對於複選框個數不多的情況下可以使用如下:
設置
((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();
}
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhengknight/archive/2009/05/02/4142437.aspx
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhengknight/archive/2009/05/02/4142437.aspx