Скрытие окна вместо закрытия: окно неактивно при восстановлении
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 11.07.17 13:23
Оценка:
Есть программка-уведомление, которая создаёт значок в трее и при нажатии на оный показывает диалог. Требуется, чтобы при закрытии диалога он бы просто прятался, а при щелчке по значку в трее снова вылезал.

Добавил обработку WM_CLOSE и WM_SYSCOMMAND+SC_CLOSE, где прописал скрытие окна ShowWindow(SW_HIDE); на щелчок трей-значка прописал показ окна ShowWindow(SW_SHOW). Проблема: когда окно показывается после такого скрытия, оно выводится в каком-то неактивном виде: содержимое диалога не отрисовывается (пустое серое поле), окно не реагирует на большинство событий (например, движение курсора мыши поверх окна не приводит к приходу сообщений в оконную функцию, не подсвечивается кнопка закрытия). Первый щелчок мышью в любом месте окна "активизирует" это окно (сам щелчок при этом "съедается" и не обрабатывается по назначению), после чего оно отрисовывается полностью и начинает корректно работать и реагировать на события.

Для эксперимента добавил обычную кнопку, которая так же скрывает окно через SW_HIDE — с ней такой проблемы нет, только с кнопкой закрытия окна. Прошу помощи, почему такое может происходить и как сие побороть. Гугление ничего не дало.

Тестовый проект (VS 2015)

P.S. Вместо скрытия-показа диалога можно, конечно, его уничтожать его и заново создавать. Не исключено, что это решило бы проблему, но мне не хотелось костылить дополнительное скрытое окно исключительно для обработки событий от трей-значка. Кроме того, хочется понять, что же я делаю неправильно.
Почему же, ё-моё, ты нигде не пишешь «ё»?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.