所谓动态创建是相对于静态创建而言的
我这里的静态创建指的在资源视图中往对话框上拖拽的方法添加控件的方法
而动态创建即不通过拖拽的方法创建控件的方法
1.静态控件的动态创建
首先在主对话框中添加一个CStatic成员
1 class CDlgDlg : public CDialogEx 2 { 3 //省略 4 CStatic m_Static; 5 //省略 6 };
添加一个按钮,在该按钮的消息响应函数中动态创建一个静态控件
1 void CDlgDlg::OnBnClickedBtn1() 2 { 3 m_Static.Create(_T("动态创建的CStatic控件:"),WS_CHILD|WS_VISIBLE|SS_CENTER, 4 CRect(10,10,200,50),this); 5 }
编译运行后的效果:
2.图片控件的动态创建
在主对话框类中添加一个CStatic类型的成员和一个CBitmap类型的成员
1 class CDlgDlg : public CDialogEx 2 { 3 //省略 4 CStatic m_Static; 5 CBitmap m_Bitmap; 6 //省略 7 };
然后在主对话框上添加一个按钮,在该按钮的单击事件处理程序中动态创建一个图片控件
1 void CDlgDlg::OnBnClickedBtn1() 2 { 3 CRect rect; 4 5 GetClientRect(&rect); 6 7 m_Static.Create(_T(""),WS_CHILD|WS_VISIBLE|SS_CENTERIMAGE|SS_BITMAP, 8 rect,this); 9 10 if (m_Static.GetBitmap() == NULL) 11 { 12 m_Bitmap.LoadBitmap(IDB_BITMAP1); 13 m_Static.SetBitmap((HBITMAP)m_Bitmap.GetSafeHandle()); 14 } 15 }
编译运行后的效果图:
3.编辑框控件的动态创建
首先在主对话框类中添加一个CEdit类型的成员
1 class CDlgDlg : public CDialogEx 2 { 3 //省略 4 CEdit m_Edit; 5 //省略 6 };
接着在主对话框上面添加一个按钮,接着在该按钮的单击事件响应函数中动态创建一个编辑框控件
1 void CDlgDlg::OnBnClickedBtn1() 2 { 3 m_Edit.Create(ES_MULTILINE|ES_WANTRETURN|WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER, 4 CRect(10,10,100,100),this,1); 5 }
编译运行后的效果如下:
4.按钮控件的动态创建
按钮的种类有多种,常见的有普通按钮,单选按钮,复选按钮
首先我们在主对话框类中添加3个CButton类型的成员
1 class CDlgDlg : public CDialogEx 2 { 3 CButton m_Btn1; 4 CButton m_Btn2; 5 CButton m_Btn3; 6 };
然后在主对话框上添加3个按钮,分别在这3个按钮的单击事件处理函数中动态创建普通按钮控件,单选按钮控件,复选按钮控件
1 void CDlgDlg::OnBnClickedBtn1() 2 { 3 m_Btn1.Create(_T("普通按钮"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 4 CRect(10,10,100,30),this,1); 5 } 6 7 8 void CDlgDlg::OnBnClickedBtn2() 9 { 10 m_Btn2.Create(_T("单选按钮"),WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON, 11 CRect(10,100,100,130),this,2); 12 } 13 14 15 void CDlgDlg::OnBnClickedBtn3() 16 { 17 m_Btn3.Create(_T("复选按钮"),WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX, 18 CRect(10,40,100,70),this,3); 19 }
编译运行后的效果如下:
5.列表框控件的动态创建
首先在主对话框类中添加一个CListBox类型的成员
1 class CDynamicDlg : public CDialogEx 2 { 3 //省略 4 CListBox m_ListBox; 5 //省略 6 };
接着在主对话框上添加一个按钮,在该按钮的单击事件响应函数中动态创建一个列表框控件
1 void CDynamicDlg::OnBnClickedBtn1() 2 { 3 m_ListBox.Create(WS_CHILD|WS_VISIBLE|LBS_STANDARD|WS_HSCROLL, 4 CRect(10,10,200,200),this,1); 5 6 m_ListBox.AddString(_T("蛮王")); 7 m_ListBox.AddString(_T("刀妹")); 8 m_ListBox.AddString(_T("火男")); 9 }
编译运行后的效果:
6.组合框控件的动态创建
首先在主对话框类中添加一个CComboBox类型的成员
1 class CDynamicDlg : public CDialogEx 2 { 3 //省略 4 CComboBox m_ComboBox; 5 //省略 6 };
接着在主对话框上添加一个按钮,在该按钮的单击事件响应函数中动态创建一个组合框控件
1 void CDynamicDlg::OnBnClickedBtn1() 2 { 3 m_ComboBox.Create(WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST, 4 CRect(10,10,200,100),this,1); 5 m_ComboBox.AddString(_T("蛮王")); 6 m_ComboBox.AddString(_T("刀妹")); 7 m_ComboBox.AddString(_T("提莫")); 8 }
编译运行后的效果:
7.滚动条控件的动态创建
首先在主对话框类中添加一个CScrollBar类型的成员
1 class CDynamicDlg : public CDialogEx 2 { 3 //省略 4 CScrollBar m_ScrollBar; 5 //省略 6 };
接着在主对话框上面添加一个按钮,在该按钮的单击事件响应函数中动态创建一个滚动条控件
1 void CDynamicDlg::OnBnClickedBtn1() 2 { 3 m_ScrollBar.Create(SBS_HORZ|SBS_TOPALIGN|WS_CHILD|WS_VISIBLE, 4 CRect(5,5,100,30),this,100); 5 }
编译运行后的效果如下:
其他控件的动态创建方法方式,具体请参考MSDN