如何向Windows询问系统托盘图标的大小?

gj3fmq9x  于 2023-01-02  发布在  Windows
关注(0)|答案(3)|浏览(272)

我注意到我的应用程序向Windows托盘发送的图标大小为16x16像素--而我的Vista PC有一个两倍宽的任务栏,显示的图标大小为18x18。我的应用程序图标上的大小调整效果看起来很糟糕。我该如何询问Windows图标应该是什么大小?

    • 编辑**

我动态地生成了一个带有像素字体文本覆盖的图标,动态地生成一堆图标大小似乎很浪费,所以最好避免用所有"可能"的大小来构建一个图标(我甚至不确定这些是什么)。

      • GetSystemMetrics(SM_CXSMICON)**返回16-不正确的值。
      • 获取主题背景内容矩形**也没有帮助。
qkf9rpyu

qkf9rpyu1#

创建多种格式的图标,让Windows选择它想要的。
Here's the Wikipedia article on the .ico format.
如果您确实需要知道,带有SM_CXICON或SM_CYICON参数的GetSystemMetrics将告诉您Windows想要加载的宽度和高度。

qaxu7uf2

qaxu7uf22#

马克的核心答案是正确的:创建多种格式的图标,让Windows选择合适的格式。不要忘记为HighDPI方案创建32 x32和64 x64的图标。
但是SM_CXICON/SM_CYICON不一定返回任务栏中使用的图标大小,任务栏根据图标大小选择合适的图标大小(这在Windows7中要重要得多)。
只要提供适当大小的图标,你应该没问题。

hgqdbh6s

hgqdbh6s3#

您最好的选择可能是GetThemeBackgroundContentRectTBN_BACKGROUND作为iPartId传递给托盘通知后台。
GetThemeBackgroundContentRect应该返回当前主题定义的大小,该大小可以用于绘制而不与父元素的边框重叠。如果我没有阅读错的话,这应该是允许的最大通知图标大小,并且可能是正在使用的大小。
使用多个DPI设置进行测试可能是判断是否返回正确值的最简单方法。

相关问题