Как создать DLL-файл со значками

Вероятно вам приходилось видеть, что некоторые DLL-файлы содержат множество значков. Например, shell32.dll, imageres.dll и другие. Мы также можем создать такую библиотеку значков, которая будет храниться в DLL-файле. Также я покажу, как можно извлечь значки и вывести их на форме.

Шаг первый. Запустите Visual Studio 2010 и создайте новый проект Class Library. Для удобства я присвоил проекту имя IconLibrary.

Далее выбираем в меню File | New | File и в диалоговом окне выбираем пункт Native Resource Template и щелкаем на кнопке Open.

В результате будет создан файл ResTempl1.rct. Щелкните правой кнопкой на файле в Visual Studio и выберите команду Add Resource....

В диалоговом окне Add Resource выберите элемент Icon и щелкните кнопку Import.... Вам необходимо указать значки, которые вы хотите импортировать. Рекомендую сложить все необходимые значки в одну папку и затем их выбрать сразу все (поддерживается множественный выбор). Когда вы щелкните кнопку Open, все значки будут импортированы под именами IDI_ICON1, IDI_ICON1 и т.д.

Снова выбираем команду Add Resource... и выбираем элемент Version и щелкаем на кнопке New. Будет создана заготовка для хранения информации о версии файла. Добавьте свою информацию о версии файла, названии продукта, торговой марке и т.д.

Далее необходимо сохранить файл ResTempl1.rct как res-файл (File | Save ResTempl1.rct as... и выберите расширение res).

Вернитесь на вкладку Class1.cs и выберите Project | IconLibrary Properties.... Установите переключатель Resource File и укажите путь к созданному ранее файлу ресурсов с расширением RES.

Далее выбираем Build | Build IconLibrary. В результате у нас образуется файл динамической библиотеки IconLibrary.dll.

Чтобы убедиться в том, что у нас появился полноценный DLL-файл со значками, выберите ярылк любого exe-файла, например, Notepad.exe и в свойствах ярлыка выберите кнопку Сменить значок. В диалоговом окне Смена значка через кнопку Обзор укажите путь к вашей библиотеке и вы увидите все значки, которые хранятся в вашем файле. Поздравляю, вы создали свою библиотеку значков.

Использование значков из DLL-файла

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

Рассмотрим пример извлечения значка из Dll-файла и показа его на форме.

Создадим обычное приложение Windows Form Application и разместим на форме кнопку. Далее воспользуемся системной функцией Windows API ExtractIcon:


using System.Runtime.InteropServices;

[DllImport("shell32.dll")]
static extern IntPtr ExtractIcon(IntPtr hInst,
string sFileName, int nIconIndex);

Итак, мы объявили фукнцию и теперь можем извлечь любой значок. Не забываем, что отчет значков идет с 0. Предположим, мы хотим вывести второй значок из DLL-файла в верхней части формы:


private void button1_Click(object sender, EventArgs e)
{
    Graphics g = CreateGraphics();
    IntPtr hIcon;
    hIcon = ExtractIcon(this.Handle, @"C:\Users\tehnolog\Projects\IconLibrary\IconLibrary.dll", 1);
    g.DrawIcon(Icon.FromHandle(hIcon), 10, 15);
    g.Dispose();
}

Как видите, ничего сложного. Удачного вам программирования!

При подготовке статьи использовались материалы с сайта How you make a dll file which contains the icon set like "SHELL32.dll"

Реклама