Нижеследующий код использует функции CreateIconFromResourceEx, DrawIcon и LookupIconIdFromDirectoryEx и несколько функций ресурса, чтобы создать дескриптор значка, основанный на данных значка из другого исполняемого файла. Затем, модуль показывает на экране значок в окне.
Демонстрационный пример
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); |