Московский инженерно-физический институт

Вид материалаПрактикум

Содержание


Файл ресурсов
Описание меню в файле ресурсов
POPUP следует перечень пунктов, или команд этого меню, который появится на экране при открывании меню. Перечень заключается в оп
Main) имеет также вся линейка меню, в то время как элементы меню (в нашем случае меню "Фон"
Menuitem separator
Подобный материал:
1   ...   6   7   8   9   10   11   12   13   ...   24

Файл ресурсов


Файл ресурсов является текстовым файлом и имеет стандартное расширение .RC. В данной программе в него включено только описание меню; вообще же в файле ресурсов можно описывать диалоговые окна, растровые изображения, пиктограммы, курсоры, таблицы символьных строк и пр. Различные ресурсы описываются в файле ресурсов в специальных форматах, понятных для компилятора ресурсов, входящего в состав любой среды программирования, в частности, пакета Borland С++. Обработка исходного текста самой программы и исходного текста ресурсов происходит, можно сказать, параллельно (рис. 3.2): компилятор исходного текста программы обрабатывает файл .CPP, образуя двоичный объектный файл с расширением .OBJ, а компилятор ресурсов обрабатывает файл .RC, получая из него промежуточный файл с расширением .RES.



Рис. 3.2. Процесс создания выполнимого файла для программы
с ресурсами


Далее компоновщик компонует файлы .OBJ и .RES, собирая из них единый загрузочный файл с расширением .EXE, который включает в себя программные коды, данные и ресурсы. После образования загрузочного файла промежуточные файлы с расширениями .OBJ и .RES уже не нужны; их вполне можно удалить, так как все необходимое для выполнения программы входит в файл .EXE.

Существенно, что элементы приложения, описанные в файле ресурсов (например, форматы меню и диалогов, а также тексты и рисунки) не разбросаны по загрузочному файлу, а сосредоточены в одном месте и хранятся в определенном формате (рис. 3.3). Это дает возможность специальным программам, понимающим этот формат, читать и даже модифицировать ресурсы непосредственно в загрузочном файле приложения – действие, совершенно невозможное в традиционных программах, не использующих понятие ресурсов.



Рис. 3.3. Возможное размещение ресурсов в загрузочном файле
приложения


Преимущества, возникающие при выделении определенных объектов в файл ресурсов, носят многоплановый характер:
  • Программа требует меньше памяти, так как ресурсы могут загружаться (из файла .EXE) лишь по мере надобности. Если, например, в виде ресурсов хранятся строки аварийных сообщений, они могут подгружаться в память лишь в случае возникновения ошибок, при которых эти сообщения должны выводиться на экран, а при нормальном выполнении занимать место в памяти не будут.
  • Файл ресурсов проще выглядит и имеет бόльшую наглядность, чем исходный текст программы. Редактирование состава меню и диалоговых окон или содержимого текстовых строк значительно удобнее выполнять в отдельном файле ресурсов, чем в исходном тексте программы.
  • Использование ресурсов упрощает структуру и содержание программы, так как при описании, например, меню в файле ресурсов система берет на себя организацию и показ меню, а программист должен лишь обеспечить содержательную обработку команд меню.
  • Специальные инструментальные средства, разработанные для редактирования ресурсов, в частности входящая в состав IDE Borland C++ программа Resource Workshop (“мастерская ресурсов”), существенно облегчают разработку и редактирование меню, диалогов, пиктограмм и курсоров. То же можно сказать про среду Microsoft Visual C++, в которую встроены средства визуального создания и редактирования ресурсов.
  • Ресурсы можно редактировать непосредственно в загрузочном файле приложения (с помощью упомянутого выше редактора ресурсов). Это, в частности, дает возможность переводить тексты сообщений и меню на другой язык, не имея исходных текстов приложений (так называемая локализация программных продуктов).
  • Ресурсы, например, изображения элементов управления, кнопок, курсоров, пиктограмм и пр. можно извлечь из загрузочного файла приложения, чтобы использовать их в другом приложении.

Описание меню в файле ресурсов


Состав, или сценарий меню описывается с помощью соответствующих ключевых слов и предложений языка описания ресурсов. Сценарий меню начинается с ключевого слова MENU, которое может быть написано как прописными, так и строчными буквами, и за которым следует перечень элементов линейки меню, заключенный в “операторные скобки” – операторы BEGIN и END – или просто в фигурные скобки {...}. Ключевое слово MENU предваряется произвольным именем (у нас это имя Main), которое выступает как идентификатор всей линейки меню и будет использовано далее в тексте программы.

Каждый элемент перечня начинается с ключевого слова POPUP, за которым следует название этого элемента. Обычно элементы линейки меню называют просто меню. Если в программе предусмотрено, как это обычно и делается, управление меню не только мышью, но и клавиатурой (нажатием комбинаций клавиш Alt+буква), то “горячую” букву имени элемента меню следует предварить знаком амперсанта (&). В нашей программе линейка меню имеет единственное меню "Фон"; управление меню от клавиатуры в программе не предусмотрено.

Вслед за предложением POPUP следует перечень пунктов, или команд этого меню, который появится на экране при открывании меню. Перечень заключается в операторные скобки {...}. Каждый пункт начинается ключевым словом MENUITEM, за которым указывается название данной команды и ее идентификатор. Идентификаторы обычно имеют символическую форму. У нас это обозначения MIBLUE, MIGREEN и MIEXIT, которым с помощью директивы препроцессора #define были присвоены произвольные значения 100, 101 и 102. В дальнейшем при выборе той или иной команды меню система Windows передаст в приложение в сообщении WMCOMMAND идентификатор выбранной команды, что позволит программе определить, какая именно команда (пункт меню) была выбрана пользователем.

Заметьте, что идентификатор (в виде имени Main) имеет также вся линейка меню, в то время как элементы меню (в нашем случае меню "Фон") идентификатора не имеют. Это происходит потому, что элементы меню обслуживаются системой Windows, а не прикладной программой. Мы не выполняем никаких действий при щелчке мышью по элементу "Фон"; система сама открывает его меню. Команды же меню обслуживаются приложением, и, чтобы их можно было различить, им присваиваются идентификаторы.

Предложение

MENUITEM SEPARATOR

служит для проведения в меню горизонтальной черты, разделяющей группы команд, и, естественно, идентификатора не имеет.