Как сделать иконку для приложения windows forms

Обновлено: 04.07.2024

Начинаем украшать своё окно. Стандартная иконка вас не устраивает, так как, во-первых, она выглядит убого, а во-вторых, увидев её, все сразу поймут, что вы начинающий программист. Каждый компилятор: Delphi, Builder, Visual C++ привносят свои иконки. По ним можно догадаться где было сделано приложение. Это, своего рода реклама компилятора. Visual C++ содержит встроенное средство создания редактирования иконок. Кроме того, вы можете просто скопировать в папку с проектом файл с расширением **.ico. Это и будет наша иконка.
Обычно каждая фирма имеет свою фирменную иконку, по которой узнают её продукт. Действительно. Иконки таких программ, как Adobe Photoshop, Microsoft Word, Borland Delphi не спутаешь ни с какими другими.
Иконки, курсоры, картинки - это ресурсы приложения. Ссылки на них находятся в файле с расширением **.rc. Это некомпилированный файл ресурсов, в котором вы будете описывать всё, что не входит в стандартное окно.
В файле ресурсов обычно содержатся подробные описания диалоговых окон, элементов управления, меню и др. Это своего рода разметка - что, где и с какими координатами находится. У нас пока никаких ресурсов нет. Что ж, сейчас они появятся!
Выберите в меню пункт Project->Add Resource или нажмите Ctrl+R. У вас появится окно добавления ресурса.


Окно добавления ресурса


Через него можно добавлять картинки, курсоры, диалоговые окна, меню, панели управления и др. Выберите строчку Icon и нажмите кнопку New, если хотите воспользоваться редактором рисования, или кнопку Import, если хотите вставить готовый файл. В любом случае, она откроется в редакторе. А в папочке Resourse Files у вас появился файл с расширением rc и файл иконки. Если щёлкнуть по файлу RC, то выпадет всё, что в него входит. В данном случае, иконка. Компилятор её назвал IDI_ICON1. IDI - (все имена начинаются с ID - Identifer). Вы можете изменить её название, щёлкнув правой кнопкой по строке с именем и выбрав в контекстном меню поле "Properties". У вас откроется в левой нижней части новое окно, если вы работаете в 7-й версии или появится окно Properties если это версия 6. В строке ID



вам никто не запрещает поменять имя. Смените безликое IDI_ICON1 на IDI_MYICON, чтобы точно знать, что это ВАША иконка. Запустите проект кнопкой F5.

Что? Вместо красивой иконки дурацкий флажок? Кончено. Окно-то не знает, что вы добавили иконку в проект. Надо ему об этом сказать.

Перво-наперво, познакомим компилятор с нашей иконкой. Объявим идентфиикатор szIconName, который будет содержать имя иконки в редакторе ресурсов (IDI_MYICON). Переменную szIconName лучше всего объявить под объявлением имени программы, в самом начале:

char szProgName[]="Имя программы"; //эта строка уже была
char szIconName[]="IDI_MYICON"; //а эту мы добавим


Когда мы заполняли структуру WNDCLASS, мы совершенно чётко сказали ей, что иконок у нас нет, не было и не будет, приравняв поле w.hIcon=0. Найдите строку:

w.hIcon=0;

w.hIcon=LoadIcon(hInstance, szIconName);

hInstance - идентификатор текущего приложения.

IDI_MYICON ICON "serdechko.ico"

У файлов *.rc свой язык. В этой строке мы пишем сначала идентификатор IDI_MYICON, потом говорим, что это иконка ICON. Потом идёт имя файла, который по умолчанию в той же папке.


Видите, в левом верхнем углу новая иконка!
Теперь даже в проводнике, приложение будет носить вашу икноку!

Выберите в меню Build->Rebuild All или Build->Build Solution.

Теперь даже в Проводнике, ваша программа будет гордо носить иконку, данную вами.

Предупреждение! Иногда компилятор упорно не хочет включать новую иконку и выдаёт программу с флажками вместо иконок. Какие от этого есть рецепты? Создавать файл ресурсов самому. Для этого примера он приведён полностью и если вы заменит созданный автоматически файл тем, что привёл я, поменяв имя файла на своё, то хуже от этого никому не будет.

Конечно такие сложности будут только в API. В MFC и VCL (тем более!) всё в значительной степени автоматизировано. Достаточно нескольких щелчков мышью.

Кроме пользовательских иконок, можно вывести стандартные иконки, если ваше окно подходит под их назначение:

IDI_APPLICATION - иконка приложения по умолчанию
IDI_ASTERISK - символ i (информационные приложения)
IDI_EXCLAMATION - восклицательный знак (предупреждение)
IDI_HAND - знак STOP (ошибка)
IDI_QUESTION - вопросительный знак
IDI_WINLOGO (NULL) - флажок

Потренеруйтесь, меняя иконки, например:

w.hIcon=LoadIcon(hInstance, IDI_APPLICATION);

Я часто буду использовать в своих примерах IDI_APPLICATION, так как её показать уже не стыдно.

Читайте также: