NotifyIcon и дисплеи с высоким разрешением

Следуя этому руководству: http://www.hhhh.org/cloister/csharp/icons/ Мне удалось заставить свой NotifyIcon выглядеть должным образом, потому что Windows решила использовать значок 32x32 и масштабировать его до размера 16x16 вместо простого использования значка 16x16.

При этом у меня есть файл .ico со следующими разрешениями:

  • 256x256x32
  • 64x64x32
  • 48x48x32
  • 32x32x32
  • 16x16x32
  • 48x48x8
  • 32x32x8
  • 16x16x8
  • 32x32x4
  • 16x16x4

Однако, когда я увеличиваю настройки DPI на моем дисплее, значок, отображаемый в NotifyIcon, представляет собой версию с более высоким разрешением, с большим количеством украшений, которые в конечном итоге выглядят ужасно масштабированными до размера NotifyIcon. Значок какого размера он принимает и масштабируется сейчас? Не лучше ли создать простой значок любого размера специально для NotifyIcon?


person DTI-Matt    schedule 20.09.2013    source источник


Ответы (3)


Значки, отображаемые в области уведомлений, представляют собой небольшие значки. То есть их размер задается системной метрикой SM_CXSMICON. Определите этот размер и поставьте значок с точными размерами, чтобы избежать сглаживания. Если у вас нет под рукой точного размера, возможно, лучшее, что вы можете сделать, - это нарисовать ближайший значок меньшего размера посередине пустого прозрачного холста и использовать его.

Возможно, вы не сможете сделать это с помощью управляемой оболочки NotifyIcon. Я ожидаю, что у вас недостаточно контроля. Процедура, которую я описываю, действительно требует, чтобы вы могли вызвать Shell_NotifyIcon, собственный API, и передать HICON.

person David Heffernan    schedule 26.09.2013

Эта страница http://msdn.microsoft.com/en-us/library/bb773352(VS.85).aspx дает пример того, как передать правильный значок для правильного DPI. Он использует LoadIconMetric, который, вероятно, напрямую не доступен в C #, но его было бы просто маршалировать.

person Neil    schedule 01.10.2013

Проверьте мой ответ здесь: notifyicon изображение выглядит ужасно, когда оно попадает в панель задач

По сути, вам нужно явно указать, какой размер использовать во время выполнения, и объявить ваше приложение как DPI-Aware.

person idmadj    schedule 24.03.2014