MFC控件的SubclassDlgItem

MFC控件的SubclassDlgItem

 
要在程序中建立新設計的控件,顯然不能用自動建立的辦法,由於對話框模板對新控件的特性一無所知.程序能夠用手工方法建立控件,在調用派生類的Create函數時,派生類會調用基類的Create函數建立控件.用Create函數建立控件是一件比較麻煩的工做,程序須要爲函數指定一大堆的控件風格以及控件的座標和ID.特別是控件的座標,沒有經驗的程序員很難確切地安排控件的位置和大小,每每須要反覆調整.利用MFC的CWnd::SubclassDlgItem提供的動態鏈接功能,能夠避免Create函數的許多麻煩,該函數大大簡化了在對話框中建立派生控件的過程.

  你們知道,在用手工方法建立控件時,先要構建一個控件對象,而後再用Create函數在屏幕上建立控件窗口,也就是說,控件的建立工做是由控件對象完成的.動態鏈接的思路則不一樣,SubclassDlgItem能夠把對話框中已有的控件與某個窗口對象動態鏈接起來,該窗口對象將接管控件的消息處理,從而使控件具備新的特性.SubclassDlgItem函數的聲明爲程序員

 

BOOL SubclassDlgItem( UINT nID, CWnd* pParent );函數

 

  參數nID是控件的ID,pParent是指向父窗口的指針.若鏈接成功則函數返回TRUE,不然返回FALSE.this

  綜上所述,要在程序中使用派生控件,應該按下面兩步進行:spa

在對話框模板中放置好基類控件.設計

在對話框類中嵌入派生控件類的對象.指針

在OnInitDialog中調用SubclassDlgItem將派生類的控件對象與對話框中的基類控件相鏈接,則這個基類控件變成了派生控件.對象

 

  例如,若是要在對話框中使用新設計的編輯框控件,應先在對話框模板中的合適位置放置一個普通的編輯框,而後,在OnInitDialog函數中按下面的方式調用SubclassDlgItem便可:生命週期

BOOL CMyDialog::OnInitDialog()it

{table

CDialog::OnInitDialog();

m_MyEdit.SubclassDlgItem(IDC_MYEDIT, this);

return TRUE;

}

 

 

還有個前提  就是edit1還在生命週期內。你能夠試試在主類裏建個CEditnew類的指針 的成員變量,而後在初始化裏給這個指針賦值爲new CEditnew()  後面照舊。試試好比成員變量 CEditnew m_myEdit;而後在初始化中:m_myEdit = new CEditnew();m_myEdit->SubclassDlgItem(IDC_EDIT1,this);m_myEdit->ShowWindow(SW_SHOW);這樣試試。
相關文章
相關標籤/搜索