在資源編輯器裡我們可以方便地在對話框中加入所需控件,比如文本編輯框、列表控件等。但假如我們需要在運行期間動態生成這些控件該怎麼做呢?本文就是講述用代碼動態添加控件的方法,並提供示例工程。
程序運行界面如下
為了方便演示,我們先生成一個基於對話框的MFC工程,起名為My
在CMyDlg.h中做下面幾個步驟:
public:
//加上這個變量
CEdit m_MyEdit;
protected:
//加上這個函數, 用來響應編輯框改變的事件
afx_msg void OnChangeEdit();
在CMyDlg.cpp中做下面幾個動作:
//增加這一行,為該編輯框設定ID為1820
#define ID_MYEDT 1820
在BEGIN_MESSAGE_MAP(CMyDlg, CDialog)下面加入
ON_EN_CHANGE(ID_MYEDT, OnChangeEdit)
添加這一句的作用是將編輯控件內容改變的消息映射到OnChangeEdit函數,你要在CMyDlg.cpp中實現OnChangeEdit()函數;
好了,讓我們動態生成控件吧!
m_MyEdit.CreateEx(WS_EX_CLIENTEDGE, // 3D-border外觀
_T("EDIT"),
NULL,
ES_AUTOHSCROLL | ES_LEFT | ES_NOHIDESEL | WS_CHILD,
rect, this,
ID_MYEDT);//生成edit控件
m_MyEdit.ShowWindow(SW_SHOW); //顯示控件
m_MyEdit.SetFocus(); //設置焦點
//動態刪除可以用如下語句
GetDlgItem(ID_MYEDT)->DestroyWindow();//銷毀控件
在代碼中我們只演示了編輯控件的動態生成方法,其它控件動態生成的方法基本一致,都可以參考這一過程。
本文配套源碼