Я добавил функцию 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, Затем щелкните стрелку раскрывающегося списка и выберите параметр, чтобы добавить его:

WM_PAINT

Как видите, он вставил весь необходимый код:

Новый код

Надеюсь это поможет.

Другие вопросы по тегам