CHECK BOX 使用

對於複選框個數不多的情況下可以使用如下:

設置  
  ((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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章