Сведения о значках

Система использует значки в пользовательском интерфейсе для представления таких объектов, как файлы, папки, ярлыки, приложения и документы. Функции значков позволяют приложениям создавать, загружать, отображать, упорядочивать, анимировать и уничтожать значки. Сведения об указании значков для типов файлов см. в разделе ExtractIcon.

В этом обзоре содержатся сведения по следующим темам:

Значок "Горячая точка"

Один из пикселей в значке обозначается как горячая точка, которая является точкой, которую система отслеживает и распознает как позицию значка. Горячая точка значка обычно представляет собой пиксель, расположенный в центре значка. Если для создания значка используется функция CreateIconIndirect , можно указать любой пиксель, который станет горячей точкой.

Типы значков

Операционная система предоставляет набор стандартных значков, доступных для использования любым приложением в любое время. Файлы заголовков пакета sdk содержат идентификаторы системных значков — идентификаторы начинаются с префикса IDI_ .

Значение Значение
IDI_APPLICATION
MAKEINTRESOURCE(32512)
Значок приложения по умолчанию
IDI_ERROR
MAKEINTRESOURCE(32513)
Значок ошибки
IDI_QUESTION
MAKEINTRESOURCE(32514)
Значок вопросительного знака
IDI_WARNING
MAKEINTRESOURCE(32515)
Значок предупреждения
IDI_INFORMATION
MAKEINTRESOURCE(32516)
Значок сведений
IDI_WINLOGO
MAKEINTRESOURCE(32517)
Значок логотипа Windows
IDI_SHIELD
MAKEINTRESOURCE(32518)
Значок щита безопасности

Сведения о рекомендуемом использовании стандартных значков см. в разделе Рекомендации .

Кроме того, начиная с Windows Vista, с помощью метода SHGetStockIconInfo доступен дополнительный набор стандартных значков системной оболочки.

Пользовательские значки предназначены для использования в определенном приложении и могут иметь любой дизайн. Пользователь может загружать пользовательские значки из файлов или создавать их во время выполнения. Ниже приведены несколько пользовательских значков.

несколько пользовательских значков

Размеры значков

Система использует четыре размера значков:

  • Система маленькая
  • Большой размер системы
  • Оболочка маленькая
  • Оболочка большая
  • Jumbo (начиная с Windows Vista)

Небольшой системный значок отображается в окне подпись.

Рекомендации по предпочтительному размеру значков для приложения см. в статье Масштабирование значков.

Изменение размера системного значка

  1. В панель управления нажмите кнопку Показать, а затем откройте вкладку Внешний вид.
  2. Выберите Кнопки субтитров в списке Элемент , а затем задайте поле Размер .

Получение размера системного значка

  • Вызовите функцию GetSystemMetrics с SM_CXSMICON и SM_CYSMICON.

Большой системный значок в основном используется приложениями, но он также отображается в диалоговом окне ALT+TAB. Функции CreateIconFromResource, DrawIcon, ExtractAssociatedIcon, ExtractIcon, ExtractIconEx и LoadIcon используют системные значки. Размер большого системного значка определяется видеодрайватором, поэтому его нельзя изменить.

Получение размера большого системного значка

Функции CreateIcon, CreateIconFromResourceEx, CreateIconIndirect и SHGetFileInfo можно использовать для работы со значками размеров, отличных от системных.

Маленький значок оболочки используется в Обозреватель Windows и общих диалоговых окнах. В настоящее время по умолчанию используется небольшой размер системы.

Получение размера маленького значка оболочки

  1. Используйте функцию SHGetFileInfo с , SHGFI_SHELLICONSIZE | SHGFI_SMALLICON чтобы получить дескриптор для списка системных образов.
  2. Затем вызовите функцию ImageList_GetIconSize , чтобы получить размер значка.

На рабочем столе используется большой значок оболочки.

Изменение размера большого значка

  1. В панель управления нажмите кнопку Показать, а затем перейдите на вкладку Внешний вид.
  2. Выберите Значок в списке Элемент , а затем задайте поле Размер (этот размер хранится в реестре в разделеHKEY_CURRENT_USER\Control Panel, Desktop\WindowMetrics\Shell Icon Size).
  3. Перейдите на вкладку Плюс! и выберите поле Использовать крупные значки проверка.

Получение размера большого значка оболочки

  1. Используйте функцию SHGetFileInfo с SHGFI_SHELLICONSIZE , чтобы получить дескриптор в список системных образов.
  2. Затем вызовите функцию ImageList_GetIconSize , чтобы получить размер значка.

При заполнении структуры WNDCLASSEX , используемой при регистрации класса окна, задайте для элемента hIcon значение большого системного значка (обычно 32x32), а для элемента hIconSm — системный маленький значок (обычно 16x16). Дополнительные сведения о значках классов см. в разделе Значки классов.

Создание значка

Стандартные значки являются предопределенными, поэтому создавать их необязательно. Чтобы использовать стандартный значок, приложение может получить свой дескриптор с помощью функции LoadImage . Дескриптор значка — это уникальное значение типа HICON, идентифицирующее стандартный или пользовательский значок.

Чтобы создать пользовательский значок для приложения, обычно используется графическое приложение и включается ресурс ICON в файл определения ресурсов приложения. Во время выполнения можно вызвать LoadIcon или LoadImage , чтобы получить дескриптор значка. Ресурс значка может содержать группу изображений для нескольких различных устройств отображения. LoadIcon и LoadImage автоматически выбирают наиболее подходящий значок из группы для текущего устройства отображения.

Приложение также может создать пользовательский значок во время выполнения с помощью функции CreateIconIndirect , которая создает значок на основе содержимого структуры ICONINFO . Функция GetIconInfo заполняет структуру координатами горячей точки и сведениями о битовом и цветном растровом рисунке для значка.

Приложения должны реализовывать пользовательские значки в качестве ресурсов и использовать LoadIcon или LoadImage, а не создавать значок во время выполнения. Использование ресурсов значков позволяет избежать зависимости устройства, упрощает локализацию и позволяет приложениям обмениваться фигурами значков.

Функция CreateIconFromResourceEx позволяет приложению просматривать ресурсы системы и создавать значки и курсоры на основе данных ресурсов. CreateIconFromResourceEx создает значок на основе данных двоичных ресурсов из других исполняемых файлов или библиотек DLL. Приложение должно предшествовать этой функции с вызовами функции LookupIconIdFromDirectoryEx и нескольких функций ресурсов. LookupIconIdFromDirectoryEx возвращает идентификатор наиболее подходящих данных значка для текущего устройства отображения.

Отображение значков

Вы можете получить изображение для значка с помощью функции GetIconInfo и нарисовать его с помощью функции DrawIconEx . Чтобы нарисовать изображение по умолчанию для значка, укажите флаг DI_COMPAT в вызове DrawIconEx. Если флаг DI_COMPAT не указан, DrawIconEx рисует значок с помощью изображения, указанного пользователем.

При отображении значка система должна извлечь соответствующее изображение значка из файла .exe или .dll. Система использует следующие действия, чтобы выбрать изображение значка:

  1. Выберите ресурс RT_GROUP_ICON . Если существует несколько таких ресурсов, система использует первый ресурс, указанный в схватке ресурсов.
  2. Выберите соответствующий образ RT_ICON из ресурса RT_GROUP_ICON . Если существует несколько образов, система использует следующие критерии для выбора образа:
    • Выбирается изображение, ближайшее по размеру к запрошенным.
    • При наличии двух или более изображений этого размера выбирается изображение, соответствующее глубине цвета дисплея.
    • Если никакие изображения точно не соответствуют глубине цвета дисплея, выбирается изображение с наибольшей глубиной цвета, не превышающей глубину цвета дисплея. Если все они превышают глубину цвета, выбирается одна из них с наименьшей глубиной цвета.

Примечание

Система обрабатывает все глубины цвета 8 или более bpp как равные. Таким образом, нет никакого преимущества в том, чтобы включить в один ресурс изображение 16x16 256 цветов и 16 x 16 цветов в одном ресурсе. Система просто выберет первое из них. Если дисплей находится в режиме 8 bpp, система выберет 16-цветный значок по сравнению с 256-цветным значком и будет отображать все значки с помощью системной палитры по умолчанию.

 

Чтобы отобразить анимированный значок, используйте статический элемент управления, как показано в следующем фрагменте кода.

hIcon = LoadImage(NULL, "ico.ani", IMAGE_ICON, 0, 0, LR_LOADFROMFILE);
SendMessage( hStatic, STM_SETIMAGE, IMAGE_ICON, (LPARAM)(UINT)hIcon);

Уничтожение значка

Если приложению больше не нужен значок, созданный с помощью функции CreateIconIndirect , значок должен быть уничтожен. Функция DestroyIcon уничтожает дескриптор значка и освобождает память, используемую значком. Приложения должны использовать эту функцию только для значков, созданных с помощью CreateIconIndirect; нет необходимости уничтожать другие значки.

Дублирование значка

Функция CopyIcon копирует дескриптор значка. Это позволяет приложению или библиотеке DLL получить собственный дескриптор значка, принадлежащего другому модулю. После освобождения другого модуля приложение, которое скопировало значок, по-прежнему сможет использовать этот значок.

Функция CopyImage создает новый значок на основе указанного исходного значка. Новый значок может быть больше или меньше исходного значка.

Сведения о добавлении, удалении или замене ресурсов значков в исполняемых (.exe) файлах см. в разделе Ресурсы.

Функция DuplicateIcon создает фактическую копию значка.