Ресурсы. Файл описания ресурса

Страницы работы

Содержание работы

Ресурсы

Практически в каждой программе используются ресурсы. Файл описания ресурса RC определяет такие компоненты, как меню, диалоговые окна, пиктограммы, растровые изображения и другие данные ресурсов, применяемые в приложении. Файл ресурса позволяет отказаться от использования отдельных файлов, считываемых приложением. Ресурсы эффективны также потому, что загружаются в память только по мере необходимости.

Файлы описания ресурса транслируются транслятором ресурса (обычно называемым RC.EXE), который вырабатывает файл RES. После компоновки выполняемого файла (ЕХЕ) файл RES присоединяется к концу выполняемой программы. После этого все ресурсы, определенные в файле RC, становятся частью выполняемого файла и могут применяться во время выполнения программы.

Файлописанияресурса

Все ресурсы, используемые приложением, должны быть определены в файле описания ресурса. В листинге 7.1 показан простой файл описания ресурса с однострочным ресурсом, ICON, и многострочным ресурсом, MENU.

Листинг 7.1. Простойфайлописанияресурса____________________________________________

#include <windows.h> #include "myapp.h"

// Однострочноеописаниересурса МуАррICONmyapp.ico

// Многострочноеописаниересурса

МуАррMENU

BEGIN

POPUP "SFile"

BEGIN

MENUITEM "Ebxit",   IDM_EXIT

END

MENUITEM "«Test!",     IDMJTEST

POPUP "SHelp"

BEGIN

MENUITEM " bAbout MyApp . . . " , IDM_ABOUT

ENDEND

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

Существует пять типов однострочного описания ресурса: BITMAP, CURSOR, ICON. FONT и MESSAGETABLE. Каждый из этих операторов загружает файл данных указанного типа в данные ресурса. После включения этих данных в данные ресурса могут применяться функции LoadBitmap, LoadCursor и Loadlcon для непосредственного доступа к соответствующим данным в программе. Функция AddFontResource обычно используется для добавления данных шрифта, применяемых в приложении. Для загрузки сообщений из файла ресурса служит функция FormatMessage. Существует пять типов многострочного описания ресурса: ACCELERATORS, DIALOG, MENU, RCDATA и STRINGTABLE. Первые три рассматриваются в главе 6 и главе 8. Операторы RCDATA и STRINGTABLE рассматриваются далее в этой главе. Многострочные типы описания ресурсов легко распознать. В них для определения блоков данных ресурса используются операторы BEGIN и END, как показано для типа MENU в листинге 7.1.

Таблицы строк

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

STRINGTABLE

BEGIN

IDS_STRING1    "Simple string from .RC"

IDS_STRING2    "This text contains a \ttab,\nand a new line."

IDS_STRING3    "This text is used with wsprintf() %s %d."

END

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

Применение таблиц строк имеет ряд преимуществ, основное из которых — сокращение объема используемой памяти. Строки не загружаются до тех пор, пока они не потребуются. Система Windows загружает строки блоками с учетом идентификационных номеров строк. Строки, которые с наибольшей вероятностью будут использоваться совместно, должны быть пронумерованы последовательно в пределах небольших групп.

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

Еще одним преимуществом помещения строк в таблицу строк является поддержка нескольких языков. API Win32 поддерживает многоязычные ресурсы в одном приложении. Одна и та же выполняемая программа может поставляться в несколько стран без изменений.

Ресурсы, определяемые пользователем

Файлы ресурса могут также применяться для других типов статических данных, к которым относится все, что угодно, — от метафайлов до произвольных двоичных данных. Для произвольных данных используется оператор RCDATA в описании ресурсов. Пример применения этого оператора приведен ниже:

DatalDRCDATABEGIN

3

40

0x8232

"StringData (continued)... "

"MoreStringDataNO" END

Похожие материалы

Информация о работе