ON_CONTROL_RANGE
vc ON_CONTROL_RANGE 多個(gè)控件響應(yīng)一個(gè)方法2009-03-16 09:30分三個(gè)步驟 1.在頭文件中聲明函數(shù)例如
afx_msg void onNum(UINT uID)
2.在.cpp文件中添加函數(shù)體
void CCalculatorDlg::OnNum(UINT uID)
{ UINT index=uID-IDC_NUM_0; CString num; num.Format(_T("%d"),index); AfxMessageBox(num); } 3.添加消息映射
ON_CONTROL_RANGE(BN_CLICKED,IDC_NUM_0,IDC_NUM_9,OnNum)
第一個(gè)參數(shù) 事件
第二個(gè)參數(shù) 控件的第一個(gè)id
第三個(gè)參數(shù) 空間的最后一個(gè)id
第四個(gè)參數(shù) 響應(yīng)事件的方法
注意 id號(hào)必須是連續(xù)的 如果是自己手動(dòng)修改的 請(qǐng)先點(diǎn)擊 build -Clear 然后在重新編譯
ON_CONTROL_RANGE 宏 收藏 昨天我寫(xiě)一個(gè)程序,用到了多個(gè)check box,這多個(gè)check box響應(yīng)了同一個(gè)函數(shù),如果逐個(gè)添加消息映 射的話,那么太麻煩了,于是想到用下面的方法:
在.h文件中
BOOL m_fCheck[3]; // 代表3個(gè)check box選中的狀態(tài) afx_msg void OnCheck();
在.cpp中
在構(gòu)造函數(shù)中: for ( int i = 0; i < 3; i++ ) m_fCheck[i] = FALSE; // 初始化3個(gè)check box都為未選中狀態(tài) 在DoDataExchange中
void CTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTestDlg) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP // 添加數(shù)據(jù)映射,將每個(gè)check box和對(duì)應(yīng)的數(shù)組元素關(guān)聯(lián)起來(lái)
for ( int i=0; i<3; i++ ) DDX_Check(pDX, IDC_CHECK1 + i, m_fCheck[i]); } 在消息映射中
BEGIN_MESSAGE_MAP(CTestDlg, CDialog) //{{AFX_MSG_MAP(CTestDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP // 添加控件響應(yīng)的消息映射,由于這些控件的Id是連續(xù)的,于是我用了ON_CONTROL_RANGE
ON_CONTROL_RANGE(BN_CLICKED, IDC_CHECK1, IDC_CHECK3, OnCheck) END_MESSAGE_MAP()
在OnCheck()中
void CTestDlg::OnCheck() { } 但是問(wèn)題出來(lái)了,我無(wú)論點(diǎn)擊哪一個(gè)checkbox,在debug狀態(tài)下:
隨便點(diǎn)擊任何一個(gè),都不會(huì)出現(xiàn)任何問(wèn)題 但在release狀態(tài)下: Unhandled exception in test.exe:0xC0000005:Access Violation. 然后在輸出窗口中: First-chance exception in test.exe: 0xC0000005: Access Violation. 找了一個(gè)下午都沒(méi)有找出到底問(wèn)題出現(xiàn)在什么地方,后來(lái)去了csdn,事情終于有了眉目,對(duì)于
ON_CONTROL_RANGE宏中的響應(yīng)函數(shù)OnCheck必須得有一個(gè)ID的參數(shù): afx_msg void OnCheck(UINT uID);
而無(wú)論你是否使用這個(gè)ID。實(shí)際上,經(jīng)過(guò)我的測(cè)試,這個(gè)宏改為
ON_COMMAND_RANGE(IDC_CHECK1, IDC_CHECK3, OnCheck) 也可以,但是還是一樣OnCheck也必須帶有一個(gè)ID參數(shù)。 本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:
|
|
來(lái)自: 啟蒙彩魂 > 《我的圖書(shū)館》