Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-09.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
258 Кб
Скачать
☆

Получение описателя значков

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

myicon ICON iconfile.ico

где ICONFILE.ICO — имя файла значка. В этой инструкции значку присваивается имя "myicon". В программе на С для получения описателя значка используется функция LoadIcon. В функции LoadIcon имеется два параметра. Первым является описатель экземпляра вашей программы, который в WinMain обычно называется hInstance. Этот описатель требуется для Windows, чтобы определить, в каком файле с расширением .EXE содержится ресурс значка. Вторым параметром является имя значка из описания ресурсов, заданное в виде указателя на оканчивающуюся нулем строку. Возвращаемым значением функции LoadIcon является значение типа HICON, которое определяется в WINDOWS.H.

Имеется связь между именем значка в описании ресурсов и в инструкции, содержащей функцию LoadIcon вашей программы на С:

Описание ресурсов:

myicon ICON iconfile.ico

Исходный текст программы:

hIcon = LoadIcon (hInstance, "myicon");

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

Вместо имени вы также можете использовать число (16-разрядное беззнаковое WORD). Это число называется идентификатором (ID) значка. Ниже показано как это делается:

Описание ресурсов:

125 ICON iconfile.ico

Исходный текст программы:

hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (125));

MAKEINTRESOURCE (make an integer into a resourse string — преобразовать целое в строку ресурса) является макросом, определенным в заголовочных файлах Windows, который преобразует число в указатель, но со старшими 16 разрядами, установленными в нуль. Так Windows узнает, что второй параметр функции LoadIcon является числом, а не указателем на символьную строку.

В примерах программ, представленных ранее в этой книге, использовались предопределенные значки:

LoadIcon (NULL, IDI_APPLICATION);

Поскольку параметр hInstance установлен в NULL, Windows узнает, что этот значок является предопределенным. IDI_APPLICATION также определяется в заголовочных файлах Windows с использованием макроса MAKEINTRESOURCE:

#define IDI_APPLICATION MAKEINTRESOURCE (32512)

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

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

Описание ресурсов:

125 ICON iconfile.ico

Исходный текст программы:

hIcon = LoadIcon (hInstance, "#125");

По символу # операционная система Windows определяет, что далее следует число в ASCII-коде.

Как насчет четвертого способа? В этом способе используется макроопределение в заголовочном файле, который включается (с помощью директивы #include) и в файл описания ресурсов, и в вашу программу:

Заголовочный файл:

#define myicon 125

Описание ресурсов:

myicon ICON iconfile.ico

Исходный текст программы:

hIcon = LoadIcon (hInstance, MAKEINTRESOURCE (myicon));

При использовании этого способа будьте внимательны! Хотя регистр символов при использовании строки в качестве имени значка не имеет значения, он приводит к различию идентификаторов, генерируемых с помощью инструкций #define.

Использование идентификаторов вместо имен значков уменьшает размер файла с расширением .EXE и, вероятно, немного ускоряет работу функции LoadIcon. Больше того, если в вашей программе используется множество значков, то вы обнаружите, что проще хранить их идентификаторы в массиве.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]