Пользовательский OnPaint MFC не вызывается надежно - PullRequest
0 голосов
/ 13 февраля 2012

Я унаследовал приложение MFC, и у него есть окно, в котором есть несколько виджетов для рисования владельцем, которые отвечают на OnPaint и выполняют различное рисование.

Я заметил, что для того, чтобы заставить элементы управления перерисовываться в ответ на различные действия пользователя, был следующий код:

CRect rect;
m_myControl.GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect, FALSE);

Я думал, что это можно упростить так:

m_myControl.Invalidate(FALSE);

Но на практике, когда я делаю это таким образом, контроль рисует иногда, а не другие. В частности, когда я взаимодействую с элементами управления в окне, иногда myControl заканчивается тем, что я просто рисую сплошным серым цветом. Я изменил код обратно на более сложный стиль InvalidateRect, и он снова отлично работает.

Почему здесь разница?

1 Ответ

1 голос
/ 14 февраля 2012

Когда вы аннулируете окно, вы не аннулируете окно под ним. Если родительское окно отвечает за отрисовку элемента управления, оно не сработает, потому что вы не сказали ему, что оно нуждается в обновлении. Исходный код делает правильные вещи в этом случае.

...