Совместное использование ресурсов значка


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

Предупреждение защиты  Неправильное использование функции LoadLibrary может поставить под угрозу обеспечение безопасности вашего приложения, когда загружается неправильная динамически подключаемая библиотека (DLL). Обратитесь за информацией к документации по LoadLibrary о том, как правильно загружать динамически подключаемые библиотеки (DLL) в различных версиях Windows.

Демонстрационный пример

HICON hIcon1;       // дескриптор значка
HINSTANCE hExe;     // дескриптор загружаемого .EXE файла
HRSRC hResource;    // дескриптор FindResource
HRSRC hMem;         // дескриптор  LoadResource
BYTE *lpResource;   // указатель на данные ресурса
int nID;            // идентификатор (ID) ресурса, который лучше всего подходит текущему экрану
 
HDC hdc;        // дескриптор контекста дисплея
 
// Загружаем файл из которого копируется значок. 
// Примечание: функция LoadLibrary должна иметь полностью явный путь.
//
hExe = LoadLibrary("myapp.exe");
if (hExe == NULL)
{
    // Ошибка загрузки модуля - завершение работы из-за ошибки как только возможно
	return;
}
 
 
// Найдем каталог значка, идентификатор которого - 440. 
hResource = FindResource(hExe, 
    MAKEINTRESOURCE(440), 
    RT_GROUP_ICON); 
 
// Загрузим и заблокируем каталог значка.
 
hMem = LoadResource(hExe, hResource);
 
lpResource = LockResource(hMem);
 
// Получим идентификатор значка, который является самым соответствующим
// для монитора.
 
nID = LookupIconIdFromDirectoryEx((PBYTE) lpResource, TRUE,
    CXICON, CYICON, LR_DEFAULTCOLOR); 
 
// Найдем биты для nID значка.
 
hResource = FindResource(hExe,
    MAKEINTRESOURCE(nID), 
    MAKEINTRESOURCE(RT_ICON));
 
// Загрузим и заблокируем значок.
 
hMem = LoadResource(hExe, hResource);
 
lpResource = LockResource(hMem);
 
// Создадим дескриптор значка.
 
hIcon1 = CreateIconFromResourceEx((PBYTE) lpResource,
    SizeofResource(hExe, hResource), TRUE, 0x00030000,
    CXICON, CYICON, LR_DEFAULTCOLOR);
 
// Нарисуем значок в рабочей области приложения.
 
DrawIcon(hdc, 10, 20, hIcon1);

 

Назад в оглавление
На главную страницу

Hosted by uCoz