前两天开发工具用到了一个动态创建控件的需求,
写个简单的例子,记录一下。本身例子也比较简单,就不做详细说明了,看不懂百度就好了。
VS2012
int count1 = 0;
void CMFCApplication1Dlg::OnCbnSelchangeCombo1()
{
// TODO: 在此添加控件通知处理程序代码
//删除动态控件
int bun1id1 = 19960;//控件的id
for (int i=0;i<count1;i++)
{
CComboBox* pCombox = (CComboBox*)GetDlgItem(bun1id1);
delete pCombox;
bun1id1++;
}
int bun1id1_static = 18960;
for (int i=0;i<count1;i++)
{
CStatic* pSta = (CStatic*)GetDlgItem(bun1id1_static);
delete pSta;
bun1id1_static++;
}
//获得当前选择的数量
CString enumNameCstr;
m_combox.GetWindowText(enumNameCstr);
int num = atoi(enumNameCstr.GetBuffer());
//动态创建控件
int bun1id = 19960;//控件的id
for (int i=0;i<num;i++)
{
CComboBox* combox = new CComboBox();
combox->Create(WS_VISIBLE|WS_CHILD|CBS_DROPDOWNLIST, CRect(100, 80+i*30,300,500+i*300), this, bun1id);
combox->AddString("1");
combox->AddString("2");
combox->AddString("3");
bun1id++;
count1++;
}
//动态创建控件(模板类型名字)
int bun1id_static = 18960;
for (int i=0;i<num;i++)
{
char str[256];
sprintf_s(str, "这是%d", i+1);
CStatic* sta = new CStatic();
sta->Create(str,WS_CHILD|WS_VISIBLE|SS_CENTER, CRect(10,80+i*30,80,200+i*30), this, bun1id_static);
bun1id_static++;
}
}
void CMFCApplication1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString enumNameCstr;
m_combox.GetWindowText(enumNameCstr);
int num = atoi(enumNameCstr.GetBuffer());
//读取动态控件
int bun1id1 = 19960;
for (int i=0;i<num;i++)
{
TCHAR ch1[256];
GetDlgItem(bun1id1)->GetWindowText(ch1, 256);
AfxMessageBox(ch1);
bun1id1++;
}
}
Caesar卢尚宇
2021年3月8日