如何向Windows请求系统托盘图标的大小?

我注意到,我的应用程序发送图标到Windows托盘与16×16像素的大小 – 和我的Vista PC我有一个双倍的任务栏,似乎显示在18×18的图标。 我应用程序图标上的resize的工件看起来很糟糕。 我怎样才能问Windows图标应该是多大?

编辑:

我正在dynamic生成图标,并使用像素字体文本叠加。 看起来很浪费,dynamic地生成一堆图标大小,所以最好避免使用所有“可能的”大小构build一个图标(而不是我甚至不知道它们是什么)。

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

GetThemeBackgroundContentRect也没有帮助。

Solutions Collecting From Web of "如何向Windows请求系统托盘图标的大小?"

马克的核心答案是正确的:以多种格式创建你的图标,让Windows选择正确的。 不要忘记为HighDPI场景设置32×32和64×64图标。

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

只要提供适当大小的图标,你应该没问题。

用多种格式创建你的图标,让Windows选择一个你想要的图标。

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

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

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

GetThemeBackgroundContentRect应该返回当前主题定义的大小,可以用于绘制而不重叠父元素的边框。 如果我正确地阅读这篇文章,这将是最大的通知图标允许和推测大小正在使用。

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