
- •1. Краткие теоретические сведения
- •1.1. Общие положения о программировании в Windows
- •1.2.Общие правила вызова функций api
- •1.3. Структура окна
- •1.4. Понятие ресурсов в ос Windows
- •1.4.1. Иконки
- •1.4.2. Курсоры
- •1.4.3. Битовые картинки (*.Bmp)
- •1.4.4. Строки
- •1.4.5.Диалоговые окна
- •1.4.6. Меню
- •1.4.7. Акселераторы
- •2. Описание используемых api-функций и констант
- •2.1. Используемые константы
- •2.2. Используемые функции
- •3. Листинг
- •4. Результат работы программы
1.4. Понятие ресурсов в ос Windows
В операционную систему Windows введено понятие ресурса. Ресурс представляет собой некий визуальный элемент с заданными свойствами, хранящийся в исполняемом файле отдельно от кода и данных, который может отображаться специальными функциями. Использование ресурсов дает две вполне определенные выгоды:
Ресурсы загружаются в память лишь при обращении к ним, тем самым достигается экономия памяти.
Свойства ресурсов поддерживаются системой автоматически, не требуя от программиста написания дополнительного кода.
Описание ресурсов хранится отдельно от программы в текстовом файле с расширением RC и компилируется (получается файл с расширением RES) специальным транслятором ресурсов. В исполняемый файл ресурсы включаются компоновщиком.
Транслятором ресурсов в пакете MASM32 является RC.EXE, в пакете TASM32 - BRCC32.EXE. В данном курсовом использовался пакет MASM32.
Наиболее распространённые ресурсы.
Иконки.
Курсоры.
Битовая картинка.
Строка.
Диалоговое окно.
Меню.
Акселераторы.
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А, которая имеет два параметра:
идентификатор картинки из файла ресурсов (в нашем случае это значение IDI_BIT1, эквивалентное 500);
дескриптор процесса (приложения).
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