15,978
社区成员
发帖
与我相关
我的任务
分享
void Ctest2Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
static int nBtnIndex = 0;
nBtnIndex++;
CButton* pBtn = new /*(std::nothrow)*/ CButton;
if (NULL == pBtn)
{
return;
}
m_BtnList.push_back(pBtn);
CRect rtBtn;
GetDlgItem(IDC_BUTTON1)->GetWindowRect(&rtBtn);
ScreenToClient(&rtBtn);
rtBtn.left += 100*nBtnIndex;
rtBtn.right = rtBtn.left + 100;
CString strBtnLabel;
strBtnLabel.Format(_T("Button%d"),nBtnIndex);
pBtn->Create(strBtnLabel,WS_VISIBLE|WS_CHILD,rtBtn,this,IDC_BUTTON1+nBtnIndex);
pBtn->ShowWindow(SW_SHOW);
}
void Ctest2Dlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: 在此处添加消息处理程序代码
CButton* pBtn = NULL;
std::list<CButton*>::iterator iter;
for (iter = m_BtnList.begin(); iter != m_BtnList.end(); iter++)
{
pBtn = *iter;
if (pBtn)
{
pBtn->DestroyWindow();
delete pBtn;
pBtn = NULL;
}
}
m_BtnList.clear();
}
消息响应的话,用ON_COMMAND_RANG,或者用std::map直接映射就可以了
void OnButton(UINT nID)
{
int index = nID - IDC_BUTTON_0;
CString strBtn;
strBtn.format("BUTTON%d",index);
MessageBox(strBtn);
}
//定义个IDC_BUTTON_0 别跟现有的资源ID重复
for(int i = 0; i< btnCount; i++)
{
CRect rect(i*100,0,i*100+100,22);
m_btn[i].(Create(_T("BUTTON"), WS_VISIBLE|WS_CHILD, rect,this, IDC_BUTTON_0+i);
}
//添加消息处理函数
ON_COMMAND_RANGE(IDC_BUTTON_0,IDC_BUTTON_0+n,OnButton);
void OnButton(UINT nID);