我为初学,如有出错敬请更正。
第一种
网上找过,没有切确。
后来发现有两种方式,可以实现。
创建:
CButton m_Button[MaxNum];
afx_msg void OnClick(UINT uID);
在OnInitDialog()里
rect = new CRect(0,0,50,50);
for(i = 0;i < MaxNum;i++)//创建所有按键
{
m_Button[i].Create(NULL,NULL,rect,this,IDC_BUTTON0+i);//IDC_BUTTON0 这个可以先声明在Resource.h中,方便后续使用
}
//这里是响应函数
void CTestImage2Dlg::OnClick(UINT uID)
{
// TODO: Add your control notification handler code here
CString str;
str.Format(_T("Click %d\r\n"),uID);
TRACE(str);
}
第一种
BEGIN_MESSAGE_MAP(CTestImage2Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(IDC_BUTTON0,IDC_BUTTON0+MaxNum-1,&CTestImage2Dlg::OnClick) //这里添加一个消息范围
END_MESSAGE_MAP()
这样就可以了,很简单。
第二种,重写函数
BOOL CTestImage2Dlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
UINT buID = GetWindowLong(pMsg->hwnd,GWL_ID);//由窗口句柄获得ID号,GetWindowLong为获得窗口的ID号。
if(pMsg->message == WM_LBUTTONDOWN)
{
if((buID >= IDC_BUTTON0) && (buID < IDC_BUTTON0 +MaxNum))
{
if (NULL != m_Button[0].GetSafeHwnd())
{
OnClick(buID);
}
return CDialog::PreTranslateMessage(pMsg);
}
}