/// <summary> /// Create an IconResource object to represent the icon resource in the /// given library. /// </summary> unsafe public IconResource(Library library, IntPtr pResourceName) { m_pName = pResourceName; // Get the RT_GROUP_ICON resource data. IntPtr hGroupInfo = library.FindResource(m_pName, WindowsAPI.RT_GROUP_ICON); IntPtr hGroupRes = library.LoadResource(hGroupInfo); uint dwGroupResSize = library.SizeofResource(hGroupInfo); WindowsAPI.MEMICONDIR *pDirectory = (WindowsAPI.MEMICONDIR *)Library.LockResource(hGroupRes); // Get the RT_ICON resource data for each icon in the RT_GROUP_ICON. m_images = new IconImage[pDirectory->wCount]; for (ushort i = 0; i < pDirectory->wCount; ++i) { WindowsAPI.MEMICONDIRENTRY *pEntry = GetDirectoryEntry(pDirectory, i); m_images[i] = new IconImage(library, new IntPtr(pEntry->wId)); } }
/// <summary> /// Helper function get the icon directory entry at the given index. /// </summary> unsafe private static WindowsAPI.MEMICONDIRENTRY *GetDirectoryEntry(WindowsAPI.MEMICONDIR * pDirectory, ushort index) { WindowsAPI.MEMICONDIRENTRY *pEntry = &pDirectory->arEntries; return(pEntry += index); }