本文轉載:http://blog.csdn.net/testcs_dn/article/details/7649583
大家知道,在用手工方法創建控件時,先要構建一個控件對象,然後再用Create函數在屏幕上創建控件窗口,也就是說,控件的創建工作是由控件對象完成的.動態連接的思路則不同,SubclassDlgItem可以把對話框中已有的控件與某個窗口對象動態連接起來,該窗口對象將接管控件的消息處理,從而使控件具有新的特性.SubclassDlgItem函數的聲明爲
BOOL SubclassDlgItem( UINT nID, CWnd* pParent );
參數nID是控件的ID,pParent是指向父窗口的指針.若連接成功則函數返回TRUE,否則返回FALSE.
綜上所述,要在程序中使用派生控件,應該按下面兩步進行:
在對話框模板中放置好基類控件.
在對話框類中嵌入派生控件類的對象.
在OnInitDialog中調用SubclassDlgItem將派生類的控件對象與對話框中的基類控件相連接,則這個基類控件變成了派生控件.
例如,如果要在對話框中使用新設計的編輯框控件,應先在對話框模板中的合適位置放置一個普通的編輯框,然後,在OnInitDialog函數中按下面的方式調用SubclassDlgItem即可:
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_MyEdit.SubclassDlgItem(IDC_MYEDIT, this);
return TRUE;
}
- <span style="font-size:16px;">CxSkinButton *pSkinBnt = NULL;
- pSkinBnt = new CxSkinButton; // del at Clear();
- //子類化控件
- BOOL ret = pSkinBnt->SubclassDlgItem(id,parent);
- //如果執行失敗,則說明沒有在對話框模板中放置好基類控件
- if (!ret)
- {
- //創建按鈕
- UINT stype = WS_CHILD|WS_VISIBLE;
- pSkinBnt->Create(NULL, stype, rect, parent, id);
- }</span>
我調用“SubclassDlgItem”函數成功了,