Рассмотрите приложение с одним окном.Есть ли способ «задержать» сообщение WM_ACTIVATE/WM_ACTIVATEAPP?
Если окно активировано - то есть, если оконная процедура (WindowProc
) возвращает сообщение WM_ACTIVATE
(или, аналогично, WM_ACTIVATEAPP
) - оно выполняет действие. (Действие, чтобы проверить открытый файл для изменения, если да, то спросить пользователя, если он хочет, чтобы загрузить файл)
Проблема: WM_ACTIVATE
/WM_ACTIVATEAPP
также посылается, когда пользователь выполняет действия, как нажав закрыть кнопку приложения или переместить окно, перетащив заголовок. Тем не менее, эти сообщения получены до полученных сообщений, таких как WM_CLOSE
или WM_MOVE
. В этих случаях, очевидно, нужно ждать, пока пользователь не закончит свое действие, прежде чем что-нибудь спросить.
Есть ли возможность отложить обработку сообщения WM_ACTIVATE
/ (которое отправляется, когда окно будет активировано) и обрабатывать другие сообщения (которые отправляются в процессе активации окна)? Суть в том, что (если я не ошибаюсь) у меня нет возможности узнать , если будет получено другое сообщение при первоначальной обработке сообщения WM_ACTIVATE
/, так как я должен изменить свое поведение в зависимости от того, что произойдет в будущее? В то же время я не смог найти другое сообщение, которое было бы отправлено после. Окно было активировано (что, по сути, необходимо здесь).
'WM_CLOSE' это особый случай, но это кажется глупым, чтобы сломать эту особенность вашего приложения просто потому, что пользователь переместил окно немного. Вы можете сделать «Вы хотите перезагрузить файл?» диалог немодальный, таким образом, пользователь по-прежнему может свободно взаимодействовать с основным окном (и если они его закрывают, вы просто закрываете диалог). –
Точно так же, как точка данных, это меня раздражает, когда приложения делают такие вещи. Я часто меняю окна по той или иной причине, и я не ожидаю, что у вас появятся побочные эффекты. –
Я согласен с @HarryJohnston, с точки зрения пользователя, все, что вы делаете, должно быть неинвазивным, чтобы начать с него. Выявление диалогового окна модели неприемлемо. Я буду ненавидеть ваше программное обеспечение. Найдите более элегантный способ сделать это, например, неинтрузивный оверлей, что-то, что не вызывает мертвой остановки во всем, что я делаю. Как только это неинтрузивно, он сразу же решает всю вашу проблему! – MicroVirus