Я добавил функцию OnPaint() в мой класс диалога, но ее не вызывают после dlg.DoModal()
Может кто-нибудь, пожалуйста, помогите мне понять, как переопределить OnPaint()
для диалогового класса, полученного из CDialog
,
Вот код:
ColorImageDlg *pDlg = NULL;
pDlg = new ColorImageDlg;
pDlg->DoModal();
delete pDlg;
Я переопределяю OnInitDialog()
и это называется. Но в то время как переопределение OnPaint()
это не вызывается.
Может кто-нибудь, пожалуйста, помогите мне исправить это?
2 ответа
Прежде всего, какой смысл создавать экземпляр диалога в куче? Вы можете просто сделать:
ColorImageDlg dlg;
dlg.DoModal();
Вам нужно изменить карту сообщений следующим образом:
BEGIN_MESSAGE_MAP(ColorImageDlg, CDialog)
ON_WM_PAINT()
END_MESSAGE_MAP()
Используйте VS Class Wizard, чтобы избежать подобных проблем.
Если вы не можете использовать ClassWizard, есть другой способ. Вот ресурс об этом:
(ВерсияVS2015) https://msdn.microsoft.com/en-us/library/dey7ke4c.aspx
(ВерсияVS2008) https://msdn.microsoft.com/en-us/library/dey7ke4c(v=vs.90).aspx)
Но в основном, после того как вы определили ресурс диалога и прикрепили его к новому классу, убедитесь, что выбрана вкладка " Представление класса ":
Далее, убедитесь, что ваш класс диалога выбран в представлении класса:
Затем щелкните значок "Сообщения" на панели " Свойства":
Прокрутите вниз список сообщений и найдите WM_PAINT
, Затем щелкните стрелку раскрывающегося списка и выберите параметр, чтобы добавить его:
Как видите, он вставил весь необходимый код:
Надеюсь это поможет.