Московский инженерно-физический институт
Вид материала | Практикум |
- Ю. С. Барсуков 1, А. Ю. Окунев 2 1 Московский инженерно-физический институт (государственный, 29.25kb.
- В. А. Курнаев Московский инженерно-физический институт (государственный университет),, 27.18kb.
- «Вегето-сосудистая дистония», 192.12kb.
- Перечен ь научных разделов и базовых вузов по научным разделам открытого конкурса, 247.02kb.
- Д. В. Гуцко Московский инженерно-физический институт (государственный университет), 34.47kb.
- В. А. Тумольский московский инженерно-физический институт (государственный университет), 27.44kb.
- К. С. Чистов Московский инженерно-физический институт (государственный университет), 24.11kb.
- Вдокладе рассматривается задача оценки рисков инвестиционных проектов электростанций, 29.4kb.
- Резюме Луценко Владимир Юрьевич, 22.32kb.
- Л. Ю. Грецкая московский инженерно-физический институт (государственный университет), 26.28kb.
Файл ресурсов
Файл ресурсов является текстовым файлом и имеет стандартное расширение .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, за которым указывается название данной команды и ее идентификатор. Идентификаторы обычно имеют символическую форму. У нас это обозначения MIBLUE, MIGREEN и MIEXIT, которым с помощью директивы препроцессора #define были присвоены произвольные значения 100, 101 и 102. В дальнейшем при выборе той или иной команды меню система Windows передаст в приложение в сообщении WMCOMMAND идентификатор выбранной команды, что позволит программе определить, какая именно команда (пункт меню) была выбрана пользователем.
Заметьте, что идентификатор (в виде имени Main) имеет также вся линейка меню, в то время как элементы меню (в нашем случае меню "Фон") идентификатора не имеют. Это происходит потому, что элементы меню обслуживаются системой Windows, а не прикладной программой. Мы не выполняем никаких действий при щелчке мышью по элементу "Фон"; система сама открывает его меню. Команды же меню обслуживаются приложением, и, чтобы их можно было различить, им присваиваются идентификаторы.
Предложение
MENUITEM SEPARATOR
служит для проведения в меню горизонтальной черты, разделяющей группы команд, и, естественно, идентификатора не имеет.