從標準控制項衍生控制項
如同任何 CWnd 衍生類別,您可以從現有的控制項類別衍生新類別來修改控制項的行為。
建立衍生的控制項類別
從現有的控制項類別衍生類別,並選擇性地覆寫
Create
成員函式,以便提供基類Create
函式的必要引數。提供訊息處理常式成員函式和訊息對應項目以修改控制項在回應特定 Windows 訊息時的行為。 請參閱 將訊息對應至函式 。
提供新的成員函式以擴充控制項的功能 (選擇性)。
在對話方塊中使用衍生的控制項需要進行額外的工作。 對話方塊中控制項的類型和位置通常是在對話方塊範本資源中指定。 如果您建立一個衍生的控制項類別,則不可以在對話方塊範本中指定該控制項類別,因為資源編譯器並不知道您的衍生類別相關資訊。
將衍生的控制項置於對話方塊中
將衍生控制項類別的物件內嵌在您的衍生對話方塊類別宣告中。
在您的對話方塊類別中覆寫
OnInitDialog
成員函式以呼叫衍生控制項的SubclassDlgItem
成員函式。
SubclassDlgItem
會「動態子類別化」從對話方塊範本建立的控制項。 當控制項進行動態子類別化時,表示您將其與 Windows 連結、處理應用程式中的某些訊息,然後再將其餘的訊息傳遞到 Windows。 如需詳細資訊,請參閱 MFC 參考 中 類別 CWnd
的 SubclassDlgItem 成員函式。 下列範例說明如何撰寫用於呼叫 OnInitDialog
的 SubclassDlgItem
覆寫:
BOOL CSubDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_wndMyBtn.SubclassDlgItem(IDC_MYBTN, this);
return TRUE;
}
由於衍生的控制項是內嵌在對話方塊類別中,因此會在建構對話方塊時建構該控制項,所以也會在終結對話方塊時終結該控制項。 比較此程式碼與依手 新增控制項中的 範例。