我有一個派生自CDialog(CNotificationDialog)的類,它是在Visual Studio選擇添加類選項時自動生成的。OnInitDialog沒有在CDialog的後代中調用
我也有另一個派生自CNotificationDialog(CWebNotificationDialog)的類。
我的代碼是這樣的:
CNotificationDialog* dlg = new CWebNotificationDialog();
dlg->Display();
將顯示對話框,但CWebNotificationDialog :: OnInitDialog中的方法不被調用。只調用CNotificationDialog :: OnInitDialog方法。
在你問之前,是的,它被宣佈爲虛擬。 我已經嘗試添加DECLARE_DYNAMIC,BEGIN_MESSAGE_MAP和所有其他自動生成的宏,但沒有運氣。
我在做什麼錯?
這是CNotificationDialog :: OnInitDialog的外觀。
BOOL C1NotificationDialog::OnInitDialog()
{
CDialog::OnInitDialog();
HICON hIconBig = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 32, 32, LR_SHARED);
CStatic *pPictureCtrl = (CStatic*)GetDlgItem(IDS_NOTIFICATION_DLG_LOGO);
pPictureCtrl->SetIcon(hIconBig);
return TRUE;
}
它的聲明如下:
protected:
virtual BOOL OnInitDialog();
你做錯了。你應該使用基類指針,這是一個常用的scernario。我不知道你爲什麼使用基類對象的派生類指針,聽起來很腥。 – zar
沒有CDialog :: Display –
Yest,這是必要的。發佈CNotificationDialog的OnInitDialog。 – rrirower