Sharing Icon Resources

The following code uses the functions CreateIconFromResourceEx, DrawIcon, and LookupIconIdFromDirectoryEx, and several of the resource functions, to create an icon handle based on icon data from another executable file. Then, it displays the icon in a window.

HICON hIcon1; // icon handle

HINSTANCE hExe; // handle to loaded .EXE file

HRSRC hResource; // handle for FindResource

HRSRC hMem; // handle for LoadResource

BYTE *lpResource; // address of resource data

int nID; // ID of resource that best fits current screen

HDC hdc; // handle of display context

// Load the file from which to copy the icon.

hExe = LoadLibrary("myapp.exe");

// Find the icon directory whose identifier is 440.

hResource = FindResource(hExe,

MAKEINTRESOURCE(440),

RT_GROUP_ICON);

// Load and lock the icon directory.

hMem = LoadResource(hExe, hResource);

lpResource = LockResource(hMem);

// Get the identifier of the icon that is most appropriate

// for the video display.

nID = LookupIconIdFromDirectoryEx((PBYTE) lpResource, TRUE,

CXICON, CYICON, LR_DEFAULTCOLOR);

// Find the bits for the nID icon.

hResource = FindResource(hExe,

MAKEINTRESOURCE(nID),

MAKEINTRESOURCE(RT_ICON));

// Load and lock the icon.

hMem = LoadResource(hExe, hResource);

lpResource = LockResource(hMem);

// Create a handle to the icon.

hIcon1 = CreateIconFromResourceEx((PBYTE) lpResource,

SizeofResource(hExe, hResource), TRUE, 0x00030000,

CXICON, CYICON, LR_DEFAULTCOLOR);

// Draw the icon in the client area.

DrawIcon(hdc, 10, 20, hIcon1);