WinPro logo.

Ресурсы

НА ЭТОЙ СТРАНИЦЕ:

Что такое ресурс
Поиск и загрузка ресурсов
Добавление, удаление и перемещение ресурсов
Перечисление ресурсов

Функции для работы с ресурсами любого типа
Макросы для работы с ресурсами любого типа

Примеры

РЕСУРС - это двоичные данные, которые добавляются в исполняемый файл Windows-приложения. Существуют СТАНДАРТНЫЕ РЕСУРСЫ, такие как пиктограмма, курсор, диалоговое окно, биткарта, расширенный метафайл, шрифт, таблица акселерации, таблица строк и информация о версии приложения, а так же РЕСУРСЫ, ОПРЕДЕЛЯЕМЫЕ ПРИЛОЖЕНИЕМ, которые содержат любые данные необходимые приложению.

    Для присоединения ресурсной части к exe-файлу необходимо выполнить следующие шаги:
  1. Создать отдельные файлы курсоров, пиктограмм, биткарт, диалоговых окон и шрифтов.
  2. Написать текстовый файл описания ресурса (rc-файл), в котором указываются все ресурсы необходимые приложению.
  3. Откомпилировать rc-файл.
  4. Скомпоновать откомпилированный ресурс (res-файл) с exe-файлом приложения.

Примечание: о том, как добавить ресурсные данные в исполняемый файл, смотрите в документации к вашему компилятору.

Поиск и загрузка ресурсов

Перед тем как использовать какой-либо ресурс приложению необходимо загрузить его в память. Функции FindResource и FindResourceEx занимаются поиском ресурса в исполняемом модуле и возвращают их описатели. FindResource ищет ресурсы по указанному ей имени и типу ресурса, а FindResourceEx, так же, и по языку.

Функция LoadResource, используя описатель ресурса, возвращенный функцией FindResource, загружает ресурс в память.

Двоичные данные ресурса, полученные в результате вызовов функций FindResource и LoadResource, не могут использоваться немедленно. Для этого необходимо использовать специализированные функции:
FormatMessage - загружает и форматирует таблицу сообщений
LoadAccelerators - загружает таблицу акселерации
LoadBitmap - загружает биткарту
LoadCursor - загружает курсор
LoadIcon - загружает пиктограмму
LoadImage - загружает курсор, пиктограмму, биткарту или расширенный метафайл
LoadMenu - загружает меню
LoadString - загружает таблицу строк

Перед завершением приложение должно освободить занимаемую ресурсами память при помощи следующих функций:
DestroyAcceleratorTable - удаляет таблицу акселерации
DeleteObject - удаляет биткарту
DestroyCursor - удаляет курсор (только неразделяемый)
DestroyIcon - удаляет пиктограмму
DestroyMenu - удаляет меню

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

Добавление, удаление и перемещение ресурсов

Существует два способа добавления, удаления и перемещения ресурсов. Первый - редактирование текстового файла с описанием ресурсов, его перекомпиляция и добавление перекомпилированного ресурса к исполняемому файлу. Второй - копирование ресурсных данных напрямую в исполняемый файл приложения.

Например, для того чтобы локализовать англоязычное приложение, можно заменить англоязычные диалоговые окна на локализованные. Для этого создается соответствующее диалоговое окно при помощи редактора диалоговых окон или, редактируя файл описания ресурсов вручную. Затем, перекомпилируют его и добавляют к исполняемому файлу.

Если локализованное диалоговое окно существует в двоичном виде, то его можно добавить напрямую в исполняемый файл при помощи следующих функций:
BeginUpdateResource - создает описатель для исполняемого файла в котором нужно заменить ресурс
UpdateResource - используя описатель исполняемого файла добавляет, удаляет или заменяет в нем ресурсы
EndUpdateResource - закрывает описатель исполняемого файла

После получения описателя исполняемого файла можно многократно вызывать функцию UpdateResource, для редактирования ресурсов, но изменений в самом исполняемом файле происходить не будет. Накопленные изменения будут записаны в исполняемый файл немедленно после закрытия его описателя функцией EndUpdateResource.

Для копирования ресурсов или определения их размеров используются функции:
LoadLibrary - предоставляет описатель для исполняемого файла из которого нужно скопировать ресурс
LockResource - предоставляет указатель на данные ресурса (блокирует ресурс)
SizeofResource - возвращает размер в байтах указанного ресурса

Перечисление ресурсов

Эти функции позволяют составить список всех ресурсов исполняемого файла:
EnumResourceTypes - предоставляет список типов ресурсов обнаруженных в указанном ей исполняемом файле
EnumResourceNames - предоставляет имена ресурсов указанного типа
EnumResourceLanguages - предоставляет язык каждого ресурса указанного типа и имени

Функции для работы с ресурсами любого типа

BeginUpdateResource - Возвращает описатель, который может использоваться функцией UpdateResource для добавления, удаления или перемещения ресурсов. См. Пример 1

CopyImage - Создает новую пиктограмму, курсор или биткарту и копирует в нее атрибуты из уже существующего объекта

EndUpdateResource - Завершает обновление ресурса в исполняемом файле. См. Пример 1

EnumResLangProc - Функция обратного вызова описываемая приложением, которая вызывается функцией EnumResourceLanguages для каждого языка ресурса. См. Пример 2

EnumResNameProc - Функция обратного вызова описываемая приложением, которая вызывается функцией EnumResourceNames для каждого имени ресурса. См. Пример 2

EnumResourceLanguages - Ищет ресурсы указанного типа и имени и поочередно передает идентификаторы языков этих ресурсов в функцию обратного вызова. См. Пример 2

EnumResourceNames - Ищет ресурсы указанного типа и поочередно передает их имена или идентификаторы в функцию обратного вызова. См. Пример 2

EnumResourceTypes - Ищет ресурсы и передает тип каждого найденного ресурса в функцию обратного вызова. См. Пример 2

EnumResTypeProc - Функция обратного вызова в которую функция EnumResourceTypes поочередно передает типы обнаруженных ресурсов. См. Пример 2

FindResource - Ищет ресурсы указанного имени и типа. См. Пример 1 и Пример 2

FindResourceEx - Ищет ресурсы указанного имени, типа и языка

LoadImage - Загружает пиктограмму, курсор или биткарту

LoadResource - Загружает ресурс в глобальную память. См. Пример 1

LockResource - Блокирует ресурс в памяти (возвращает указатель на него). См. Пример 1

SizeofResource - Возвращает размер ресурса. См. Пример 1 и Пример 2

UpdateResource - Добавляет, удаляет или перемещает ресурсы. См. Пример 1

Макросы для работы с ресурсами любого типа

IS_INTRESOURCE - Макрос проверяет, является ли указанное число идентификатором ресурса

MAKEINTRESOURCE - Преобразует указанное целое число к типу ресурсов (См. Пример 2 статьи "Курсор")

Примеры операций над ресурсами любого типа

Пример 1 - копирование ресурса из одного исполняемого файла в другой.
Пример 2 - составление списка ресурсов исполняемого файла.
содержание: oГлавная
oСообщения
oРЕСУСРЫ
- Файл описания ресурсов
- Общие параметры элементов управления
- Курсоры
- Пиктограммы
гостевая книга
Hosted by uCoz