前两天开发工具用到了一个动态创建控件的需求,
写个简单的例子,记录一下。本身例子也比较简单,就不做详细说明了,看不懂百度就好了。
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日
原文:https://www.cnblogs.com/nxopen2018/p/14502065.html