Как узнать у Windows размер значков в системном трее? - PullRequest
9 голосов
/ 20 февраля 2009

Я заметил, что мое приложение отправляет значки в трее Windows размером 16x16 пикселей - и на моем компьютере с Vista у меня есть двойная панель задач, которая отображает значки размером 18x18. Артефакты изменения размера на значке моего приложения выглядят ужасно. Как спросить Windows, какого размера должны быть иконки?

редактирование:

Я генерирую иконку динамически, с наложением текста на пиксельный шрифт. Кажется расточительным динамически генерировать набор размеров значков, поэтому было бы неплохо избегать создания значков всех «возможных» размеров (не то, чтобы я даже был уверен, что это такое).

GetSystemMetrics (SM_CXSMICON) возвращает 16 - неверное значение.

GetThemeBackgroundContentRect тоже не помогло.

Ответы [ 3 ]

1 голос
/ 20 февраля 2009

Основной ответ Марка - правильный: создайте свои иконки в нескольких форматах и ​​позвольте Windows выбрать правильный. Не забудьте использовать значки 32x32 и 64x64 для сценариев HighDPI.

Но SM_CXICON / SM_CYICON не обязательно вернет размер, который будет использоваться на панели задач. Панель задач выбирает правильный размер значка для его размера (это намного более важно в Windows 7).

Просто предоставьте значки подходящего размера, и все будет в порядке.

1 голос
/ 20 февраля 2009

Создайте свои иконки в нескольких форматах и ​​позвольте Windows выбрать тот, который он хочет.

Вот статья в Википедии о формате .ico.

Если вам действительно нужно знать, GetSystemMetrics с параметром SM_CXICON или SM_CYICON сообщит вам ширину и высоту, которые Windows хочет загрузить.

0 голосов
/ 20 февраля 2009

Ваша лучшая ставка может быть GetThemeBackgroundContentRect , передавая TBN_BACKGROUND в качестве iPartId для фона уведомления в области уведомлений.

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

Тестирование с несколькими настройками DPI, вероятно, самый простой способ определить, возвращает ли оно правильное значение.

...