- •Лекция 7 Ресурсы Способы хранения данных программы
- •Общие сведения о файле ресурсов
- •Компиляция ресурсов
- •Значки и курсоры
- •Создание иконок
- •Получение описателя иконок
- •Использование иконок в программе
- •Использование альтернативных курсоров
- •Битовые образы: картинки в пикселях
- •Символьные строки
- •Использование ресурсов-символьных строк
- •Idl, "character string 1" id2, "character string 2" [определения остальных строк] }
- •Ресурсы, определяемые пользователем
Получение описателя иконок
В файле описания ресурсов ссылка на файл иконки выглядит примерно так:
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)
Предопределенные иконки и курсоры являются частью файла драйвера дисплея.