9

我注意到我的应用程序将图标发送到大小为 16x16 像素的 Windows 托盘 - 而我的 Vista PC 我有一个双宽任务栏,似乎以 18x18 显示图标。我的应用程序图标上调整大小的工件看起来很糟糕。我如何询问 Windows 图标的大小?

编辑:

我正在动态生成图标,并带有像素字体文本覆盖。动态生成一堆图标大小似乎很浪费,因此最好避免构建具有所有“可能”大小的图标(我什至不确定它们是什么)。

GetSystemMetrics(SM_CXSMICON) 返回 16 - 不正确的值。

GetThemeBackgroundContentRect 也没有帮助。

4

3 回答 3

0

Mark 的核心答案是正确的:创建多种格式的图标并让 Windows 选择正确的一种。不要忘记为 HighDPI 场景制作 32x32 和 64x64 图标。

但是 SM_CXICON/SM_CYICON 不一定会返回将在任务栏中使用的大小。任务栏为其大小选择正确的图标大小(这在 Window 7 中更为重要)

只需提供适当大小的图标,就可以了。

于 2009-02-20T04:07:53.767 回答
0

以多种格式创建您的图标,并让 Windows 选择它想要的一种。

这是关于 .ico 格式的维基百科文章。

如果你真的需要知道,带有 SM_CXICON 或 SM_CYICON 参数的GetSystemMetrics会告诉你 Windows 想要加载的宽度和高度。

于 2009-02-20T03:51:12.497 回答
0

您最好的选择可能是GetThemeBackgroundContentRectTBN_BACKGROUND作为托盘通知背景的iPartId传递。

GetThemeBackgroundContentRect 应该返回由当前主题定义的大小,可用于绘制而不重叠父元素的边框。如果我没看错,那将是允许的最大尺寸通知图标,并且可能是正在使用的尺寸。

使用多个 DPI 设置进行测试可能是判断这是否返回正确值的最简单方法。

于 2009-02-20T05:26:09.630 回答