Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции-ТРПС.doc
Скачиваний:
13
Добавлен:
15.11.2018
Размер:
810.5 Кб
Скачать

7.8. Удаление окна, сообщение wm_destroy

Сообщение WM_DESTROY появляется в очереди сообщений одним из последних. Оно показывает, что Windows находится в процессе ликвидации окна в ответ на полученную от пользователя команду. Пользователь вызывает поступление этого сообщения, если нажмет на кнопке закрытия окна, выберет пункт “Закрыть” из системного меню или нажмет комбинацию клавиш Alt+F4.

Функция главного окна стандартно реагирует на это сообщение, вызывая функцию PostQuitMessage(0), которая ставит последнее для приложения сообщение WM_QUIT в очередь сообщений. Это заставляет функцию WinMain() закончить цикл обработки сообщений и выйти в систему, завершив работу приложения.

Таким образом, мы рассмотрели основные принципы написания обработчиков сообщений, однако к этой теме мы будем возвращаться при обсуждении других аспектов Windows программирования.

8. Ресурсы приложения и их использование

Подавляющее большинство Windows программ включает множество графических элементов, именуемых ресурсами (resources) Windows.

Перечислим виды ресурсов в Win32 API:

1) меню, диалоги, панели управления, акселераторы;

2) иконки, битовые изображения, курсоры;

3) строковые таблицы, таблица версии приложения;

4) ресурсы, определяемые разработчиком.

Все перечисленные ресурсы размещаются в файле ресурсов, что представляет собой одну из самых характерных особенностей Windows программирования. Именно с помощью файлов ресурсов большинство приложений определяет визуальные элементы своего пользовательского интерфейса – меню, диалоговые окна, надписи, растровые изображения и прочее.

Файлы ресурсов, имеющие расширение *.rc создаются по известным спецификациям, в текстовом формате. Это позволяет создавать файл ресурсов приложения либо вручную – любым текстовым редактором, либо специальным редактором ресурсов, что предпочтительнее. Затем этот файл компилируется компилятором ресурсов. Полученный в результате файл с расширением *.res далее компонуется с остальными частями приложения – *.obj и *.lib файлами, образуя единый двоичный образ, содержащий выполняемый программный код и информацию о ресурсах. При этом в заголовке каждого Windows приложения формируется специальная таблица ресурсов. Эта таблица используется Windows для поиска и загрузки ресурсов в оперативную память.

Хотя ресурсы являются данными и хранятся в exe файле программы, но расположены они не в сегменте данных (DS), где хранятся обычные данные исполняемых модулей. Таким образом, к ресурсам нет непосредственного доступа через переменные, определенные в исходном тексте программы. Они должны быть явно загружены из exe файла в память.

Основная причина такого построения – экономия оперативной памяти. Действительно, трудно придумать ситуацию, когда абсолютно все ресурсы могут одномоментно понадобиться приложению. А раз в каждый момент нужны только некоторые, то более разумно – подгружать их по мере надобности.

Нужно сказать, что ресурсы не обязательно должны компоноваться с исполняемым файлом приложения, они также могут сводиться в отдельную библиотеку DLL. Преимущество этого подхода заключается в том, что при изменении файла ресурсов не требуется перекомпилировать все приложение, а нужно только заменить DLL файл. Можно также сопровождать приложение несколькими DLL, представляющими ресурсы на различных языках. Именно так поступают разработчики при создании приложения, предназначенного для работы в многоязыковой среде.

Еще одно преимущество – с точки зрения технологии программирования – использования ресурсов состоит в том, что локализация приложения в этом случае требует наименьших затрат.