Как обновить экран, если он потерял фокус

Я работаю над программой, которая требует, чтобы WM_ERASEBKGND был отключен (чтобы избежать мерцания).

Проблема возникает, когда мое главное окно теряет фокус, а другое окно (другая программа) получает фокус.

Окно с фокусом (не моя программа) делает недействительным окно МОЕЙ программы каждый раз, когда оно проходит над ним! В результате экран моего окна становится белым везде, где мимо него проходит другое окно, после чего оно почти полностью остается пустым. Очевидно, у меня не может быть программы, в которой экран становится белым каждый раз, когда теряет фокус.

Есть ли способ продолжить операции рисования моего окна (например, продолжить вызов wm_paint) даже после того, как мое окно потеряло фокус (WM_KILLFOCUS)?

0

Решение

Прежде всего, из комментариев выше, никогда Отправить WM_PAINT вручную с SendMessage или же PostMessage, использование InvalidateRect поручить окну перекрасить.

О WM_ERASEBKGNDвозвращаемое значение используется для обозначения WM_PAINT обработчик того, что фон был стерт, в случае, если процедура рисования может быть оптимизирована. Чтобы на самом деле предотвратить стирание фона, просто не звоните DefWndProc() для этого сообщения. Или даже проще, установите hbrBackground в NULL в окне класса.

Как уже упоминалось, фокус не имеет ничего общего с перекрашиванием, и ваше окно должно нормально рисовать даже в фоновом режиме.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector