我们的一个不支持DPI的MFC应用程序出现问题。
如果将系统设置更改为高dpi(例如120或144 dpi),则任务栏上的应用程序图标看起来会变差。不幸的是,我们必须注册自己的
WNDCLASS
对于大型机,
WNDCLASS.hIcon
成员您必须设置一个图标。此图标是使用
LoadIcon
功能。该函数尝试以标准大小加载图像(与
GetSystemMetrics(SM_CXICON)
,对于120dpi为40x40像素。这很不幸,因为我们没有提供这种尺寸的图标。但有一个解决方法:奇怪的是,DPI虚拟化似乎对120 DPI无效,
GetDeviceCaps(..., LOGPIXELSX)
确实返回120 dpi并且
获取系统度量(sm_cxicon)
返回40。所以我们可以捕捉到它并以不同的大小加载图标。但是对于144 dpi,它不起作用,因为现在虚拟化似乎已经生效,我们得到96 dpi和32像素,这再次导致图标看起来非常难看。
我发现如果我把
HICON
成员到
NULL
,图标显示良好。但我想知道是否可以,因为根据msdn:
希康
类图标的句柄。这个
成员必须是图标的句柄
资源。如果此成员为空,则
系统提供默认图标。
因此,即使将该成员设置为空,我是否可以指望图标始终显示?
另一种方法是以正确的大小加载图标,但为此,我必须知道系统实际上设置为144 dpi。在这里,我的第一个问题是。
是否有人知道(从DPI虚拟化应用程序中)是否可以确定系统的DPI设置?注意,我也考虑过做一些肮脏的事情,比如让一个支持dpi的应用程序告诉我实际的dpi和类似的事情,但是如果可能的话,我想避免这样的事情。
最好的问候,
汉巴巴巴
更新:
我发现设置
HICON
成员到
无效的
这不是一个好主意,因为主机的图标会被一个默认的图标取代(即使它在任务栏上看起来很好…)—我在第一次测试时没有注意到这一点。