SubClass Dialog 上面的一個控件呀!
SubClass 某個控件后,其原來的 WindowProc 替換成你自己寫的 CYourCWndClass 的 WindowProc,這樣你就可以處理這個控件的所有消息了;用 ClassWizard 維護自己的 CYourCWndClass 就可以了。
在MFC中除了SubClassDlgItem外還有SubclassWindow函數(shù)用來執(zhí)行同樣的功能。在與某個控件ID關(guān)聯(lián)起來之后,所有該控件的消息將會有該類來響應(yīng)。通常使用過程如下
一、從希望Subclass的控件派生一個類例如從CEdit->CMyEdit;
二、在CMyEdit中完成希望處理的消息,例如OnChar等;
三、在對話框類中定義一個CMyEdit類的成員變量m_myEdit;
四、在Dialog的OnInitDialog中加入m_myEdit(IDC_EDIT, this);
這樣當(dāng)在IDC_EDIT上發(fā)生OnChar時,將會調(diào)用CMyEdit中的OnChar
補充一下,用一個窗口過程替換另一個過程的行為叫SUBCLASSING,這是WINDOWS意義上的派生子類,與面向?qū)ο笳Z言的派生子類是完全不同的概念。SubClassDlgItem讓對話框內(nèi)指定子控制自己的窗口過程替代默認(rèn)窗口過程,以攔截消息。
在VC 中,DoDataExchange函數(shù)中的DDX_Control之類的函數(shù)會調(diào)用SubClassDlgItem完成窗口子類化,這樣控件自己就能處理消息了。
BOOL SubclassDlgItem( UINT nID, CWnd* pParent );
參數(shù)nID是控件的ID,pParent是指向父窗口的指針.若連接成功則函數(shù)返回TRUE,否則返回FALSE.
綜上所述,要在程序中使用派生控件,應(yīng)該按下面兩步進行:
1、在對話框模板中放置好基類控件.
2、在對話框類中嵌入派生控件類的對象.
3、在OnInitDialog中調(diào)用SubclassDlgItem將派生類的控件對象與對話框中的基類控件相連接,則這個基類控件變成了派生控件.
例如,如果要在對話框中使用新設(shè)計的編輯框控件,應(yīng)先在對話框模板中的合適位置放置一個普通的編輯框,然后,在OnInitDialog函數(shù)中按下面的方式調(diào)用SubclassDlgItem即可:
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_MyEdit.SubclassDlgItem(IDC_MYEDIT, this);
return TRUE;
}