Неправильно. Как отмечали другие, OnDraw() - это виртуальный метод CView, а не CDialog. Поэтому ваш метод OnDraw() никогда не будет вызван.
Я не знаю, почему в вашем диалоговом окне возникла проблеска мерцания, которую вам нужно будет смягчить. Если у вас есть настраиваемый элемент управления в диалоговом окне, вызывающем мерцание, вам, вероятно, необходимо исправить код чертежа и, возможно, добавить WS_CLIPCHILDREN в качестве стиля окна в ваш диалог. Это позволит убедиться, что фон пользовательского элемента управления не удаляется, когда диалог выполняет свое сообщение WM_ERASEBKGND.
Нет смысла переопределять WM_PAINT диалогового окна, если вы на самом деле не планируете делать на нем пользовательский чертеж. Если у вас нет веской причины, не делайте этого.
Если вы решили проигнорировать совет затем добавить ON_WM_PAINT() в обработчик сообщений в диалоговом окне, а затем сделать диалог самостоятельно:
void myDialog::OnPaint()
{
CPaintDC dc(this);
CCustomMemDC pDC(&dc);
// do your specialized code knowing you are responsible for drawing the whole dialog
}
Если вы действительно хотите использовать OnDraw (метод) , то вы могли бы также написать OnPaint(), как это:
void myDialog::OnPaint()
{
CPaintDC dc(this);
OnDraw(&dc);
}
Но первое, что я хотел бы сделать в вашей ситуации попробуйте добавить стиль WS_CLIPCHILDREN
в диалоговом стиле.
'OnPaint' /' OnDraw' в первую очередь (если не исключительно) для * просмотров *. Обычно вы не хотите связываться с рисунком непосредственно в диалоговом окне - вы хотите поместить элементы управления в диалог, и они должны рисовать в своих областях, и пусть остальная часть диалога позаботится о себе. –
Моя мотивация для этого, так как я следую руководству по удалению мерцания на экране. http://www.codeproject.com/Articles/33/Flicker-Free-Drawing-In-MFC –