Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
System programming / Конспект лекций / Лекция 7 Ресурсы часть1.doc
Скачиваний:
48
Добавлен:
08.05.2015
Размер:
79.87 Кб
Скачать

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

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

myicon ICON iconfile.ico

где ICONFILE.ICO — имя файла значка. В этой инструкции значку при­сваивается имя "myicon".

В редакторе ресурсов Microsoft Visual C++, вы можете задать имя иконки, ее идентификационный номер (ID_ICONn) с помощью диалогового окна "Свойства" ("Properties"), которое можно вызвать, кликнув правой клавишей мыши на идентификаторе нужной иконке.

В программе на С для получения описателя значка используется функция Loadlcon. В функции Loadlcon имеется два параметра. Первым является описатель экземпляра вашей программы, который в WinMain обычно называется hInstance. Этот описатель требуется для Windows, чтобы определить, в каком файле с расширением *.ЕХЕ содержится ресурс значка. Вторым параметром является имя значка из описания ресур­сов, заданное в виде указателя на оканчивающуюся нулем строку. Возвра­щаемым значением функции Loadlcon является значение типа HICON, которое определяется в WINDOWS.H.

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

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

myicon ICON iconfile.ico

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

HICON hicon = Loadlcon (hInstance, ''myicon");

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

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

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

125 ICON iconfile.ico

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

hicon = Loadlcon (hInstance, MAKEINTRESOURCE (125));

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

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

hicon = Loadlcon (hInstance, MAKEINTRESOURCE (ID_ICON1));

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

Ранее мы уже использовали предопределенные значки:

Loadlcon (NULL, IDI_APPLICATION);

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

#define IDI_APPLICATION MAKEINTRESOURCE (32512)

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