Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчеты по Курсовой Работе / Зыкина ресурсы С06-361-1.doc
Скачиваний:
36
Добавлен:
12.03.2015
Размер:
359.94 Кб
Скачать

1.4. Понятие ресурсов в ос Windows

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

Ресурсы загружаются в память лишь при обращении к ним, тем самым достигается экономия памяти.

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

Описание ресурсов хранится отдельно от программы в текстовом файле с расширением RC и компилируется (получается файл с расширением RES) специальным транслятором ресурсов. В исполняемый файл ресурсы включаются компоновщиком.

Транслятором ресурсов в пакете MASM32 является RC.EXE, в пакете TASM32 - BRCC32.EXE. В данном курсовом использовался пакет MASM32.

Наиболее распространённые ресурсы.

  1. Иконки.

  2. Курсоры.

  3. Битовая картинка.

  4. Строка.

  5. Диалоговое окно.

  6. Меню.

  7. Акселераторы.

1.4.1. Иконки

Могут быть описаны в самом файле ресурсов, либо храниться в отдельном файле *.ico. Рассмотрим последний случай. Вот файл ресурсов resource.rc:

#define IDI_ICON1 100

IDI_ICON1 ICON "ico01.ico"

Файл содержит две значимых строки. Одна строка определяет идентификатор иконки, вторая - ассоциирует идентификатор с файлом "ico01.ico". Оператор define является Си-оператором препроцессора.

Ниже приведен фрагмент программы для установки иконки, указанной в файле ресурсов:

PUSH 100 ; идентификатор иконки

PUSH [HINST] ; идентификатор процесса

CALL LoadIconA

MOV [WC.CLSHICON], EAX

1.4.2. Курсоры

Подход здесь полностью идентичен. Ниже файл ресурсов, где определен и курсор, и иконка.

#define IDI_ICON1 1

#define IDI_CUR1 2

IDI_ICON1 ICON " ico01.ico"

IDI_CUR1 CURSOR "cursor01.cur"

Ниже приведён фрагмент программы, вызывающей иконку и курсор:

; иконка окна

PUSH 1 ; идентификатор иконки

PUSH [HINST]

CALL LoadIconA@8

MOV [WC.CLSHICON], EAX

; курсор окна

PUSH 2 ;идентификатор курсора

PUSH [HINST]

CALL LoadCursorA@8

MOV [WC.CLSHCURSOR], EAX

Как и для иконки, программа brcc32.exe обрабатывает определение курсора в тексте файла ресурсов.

1.4.3. Битовые картинки (*.Bmp)

Пример файла ресурсов с битовой картинкой.

//битовая картинка

#define IDI_BIT1 500

IDI_BIT1 BITMAP "bit.bmp"

Для загрузки битовой картинки используется API-функция LoadBitmapА, которая имеет два параметра:

  1. идентификатор картинки из файла ресурсов (в нашем случае это значение IDI_BIT1, эквивалентное 500);

  2. дескриптор процесса (приложения).

PUSH 500

PUSH [HINST]

CALL LoadBitmapA

MOV BTM,EAX

1.4.4. Строки

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

#define str1 1001

#define str2 2000

#define str3 3000

#define str4 4000

#define str5 5000

#define str6 6000

#define str7 7000

#define str8 8000

//определение строк

STRINGTABLE

{

str1,"ВЫХОД ИЗ ПРОГРАММЫ"

str2,"ВЕРСИЯ 1.СОЗДАТЕЛЬ ПОЛТАНОВА ЕЛЕНА"

str3,"ВЫВОД СООБЩЕНИЯ"

str4,"АКСЕЛЕРАТОРЫ"

str5,"СТРОКИ"

str6,"ДИАЛОГОВЫЕ ОКНА"

str7,"ЭТОТ КУРСОР ЗАГРУЖЕН ИЗ ФАЙЛА РЕСУРСОВ"

str8,"ВЫ УЖЕ ЗАГРУЗИЛИ БИТОВУЮ КАРТИНКУ"

}

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

INVOKE LoadStringA, [HINST],1001,OFFSET BUF1,40 ;загрузитьстроку

INVOKE LoadStringA, [HINST],2000,OFFSET BUF2,40

INVOKE LoadStringA, [HINST],3000,OFFSET BUF3,40

INVOKE LoadStringA, [HINST],4000,OFFSET BUF4,40

INVOKE LoadStringA, [HINST],5000,OFFSET BUF5,40

INVOKE LoadStringA, [HINST],6000,OFFSET BUF6,40

INVOKE LoadStringA, [HINST],7000,OFFSET BUF10,40

INVOKE LoadStringA, [HINST],8000,OFFSET BUF7,40