NotifyIcon和高DPI显示

时间:2013-09-20 15:22:10

标签: c# winforms icons dpi system-tray

遵循本指南: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创建一个各种尺寸的简单图标?

3 个答案:

答案 0 :(得分:0)

通知区域中显示的图标是小图标。这是它们的大小由SM_CXSMICON系统度量标准给出。找出该尺寸并提供精确尺寸的图标以避免混叠。如果你还没有准确的尺寸,可能最好的办法就是在空的透明画布的中间绘制最近的较小尺寸的图标,并使用它。

您可能无法使用托管的NotifyIcon包装器执行此操作。我希望你没有得到足够的控制。我描述的过程实际上要求您能够调用Shell_NotifyIcon(本机API)并传递HICON。

答案 1 :(得分:0)

此页面http://msdn.microsoft.com/en-us/library/bb773352(VS.85).aspx提供了如何为正确的DPI传递正确图标的示例。它使用的是LoadIconMetric,它可能在c#中不能直接使用,但是编组它会很简单。

答案 2 :(得分:0)

在此处查看我的答案:notifyicon image looks terrible once image ends up in system tray

基本上,您需要显式声明在运行时使用的大小,并将您的应用声明为DPI-Aware。