Почему WM_PAINT иногда вызывается с пустым прямоугольником?
Я много занимаюсь рисованием. В настоящее время я использую WM_TIMER для планирования рисования с использованием InvalidateRect. По какой-то причине WM_PAINT тогда очень часто вызывается с region (0,0,0,0), поэтому в основном это пустой прямоугольник. Я пытался интерпретировать это как "целое окно", но потом это, казалось, вызвало некоторое снижение производительности. Почему Windows отправляет его тогда?
1 ответ
На ваш вопрос довольно хорошо ответили в стандартной документации: http://msdn.microsoft.com/en-us/library/windows/desktop/dd145213%28v=vs.85%29.aspx.
По сути, система отправляет сообщения WM_PAINT, когда очередь сообщений пуста, и по умолчанию она делает это время от времени, независимо от того, есть ли что-либо для рисования или нет. Многие старые приложения зависели от WM_PAINT (например, для выполнения простой обработки), и сохранение этого поведения обеспечивает совместимость.
Нет, вы не должны предполагать, что это означает весь экран. Если область пуста, вам следует избегать вызова BeginPaint/EndPaint и просто передавать ее в оконную процедуру по умолчанию.