【发布时间】:2015-09-23 16:45:11
【问题描述】:
我有一个派生自 CDialog (CNotificationDialog) 的类,它是在选择“添加类”选项时由 Visual Studio 自动生成的。
我还有另一个派生自 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();
【问题讨论】:
-
你做错了。你应该使用基类指针,这是一个常见的场景。我不知道你为什么对基类对象使用派生类指针,对我来说听起来很可疑。
-
没有CDialog::Display
-
是的,这是必要的。为 CNotificationDialog 发布 OnInitDialog。
-
我已经更新了描述。