Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы

Безопасное уничтожение окон Document Window


Так как MDI-приложения могут работать одновременно с несколькими документами, следует соблюдать осторожность при уничтожении окон Document Window, которые используются для редактирования документов, а также при завершении работы приложения. Необходимо убедиться, что пользователь сохранил все измененные документы в соответствующих файлах.

Обычный способ заключается в использовании сообщения WM_QUERYENDSESSION, о котором мы уже рассказывали в предыдущих томах "Библиотеки системного программиста". Напомним, что это сообщение посылается всем приложениям при завершении работы операционной системы Windows. Если приложение может завершить свою работу, в ответ на это сообщение оно должно возвратить значение TRUE. Если же будет возвращено значение FALSE, завершение работы Windows будет отменено.

Большинство приложений, редактирующих документы, реагируют на сообщение WM_QUERYENDSESSION следующим образом. Если пользователь не загружал документы или не изменил ни один из загруженных документов, обработчик сообщения WM_QUERYENDSESSION (который находится в функции окна Frame Window) возвращает значение TRUE, разрешая завершение Windows. Если же один или несколько из загруженных документов был изменен, но не сохранен, обработчик предлагает пользователю сохранить документ, или отказаться от сохранения документа. Аналогичные действия выполняются и при завершении работы приложения в обработчике сообщения WM_CLOSE.

Для проверки возможности уничтожения окна Document Window лучше всего послать ему сообщение WM_QUERYENDSESSION, предусмотрев в функции окна Document Window соответствующий обработчик. Этот обработчик проверяет, нужно ли сохранять документ, связанный с данным окном Document Window, и при необходимости предлагает пользователю сохранить документ или отказаться от сохранения. Если функция SendMessage, с помощью которой было послано сообщение WM_QUERYENDSESSION, возвратила значение TRUE, данное окно можно уничтожать.

Аналогичные проверки требуется выполнять в обработчике сообщения для строки "Close All" меню "Window", так как в противном случае могут быть потеряны результаты работы по редактированию одного или нескольких документов.



Содержание раздела