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

时间:2009-02-20 03:42:43

标签: windows winapi taskbar system-tray

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

编辑:

我正在动态生成图标,并使用像素字体文字叠加。动态生成一堆图标大小似乎很浪费,所以避免构建一个具有所有“可能”大小的图标会很好(不是我甚至不确定那些是什么)。

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

GetThemeBackgroundContentRect也没有帮助。

3 个答案:

答案 0 :(得分:1)

以多种格式创建图标,让Windows选择所需的图标。

Here's the Wikipedia article on the .ico format.

如果您真的需要知道,GetSystemMetrics参数为SM_CXICON或SM_CYICON将告诉您Windows要加载的宽度和高度。

答案 1 :(得分:1)

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

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

只需提供尺寸合适的图标,您就可以了。

答案 2 :(得分:0)

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

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

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