我正在经历让我的MFC应用程序DPI意识到的痛苦过程。我打算包含包含不同图标大小的icon resources。例如,list view controls的小图标应获得尺寸:16x16,20x20,24x24等。as recommend by Microsoft。
我知道我可以使用LoadImage()
(甚至LoadIconWithScaleDown()
)来加载所需大小的图标,如下所示:
HICON hIcon = (HICON)LoadImage(AfxGetApp()->m_hInstance,
MAKEINTRESOURCE(IDI_MYICON),
IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
LR_DEFAULTCOLOR);
正如LoadIconWithScaleDown()
文档的备注部分所述,如果图标尺寸不可用,LoadImage()
会缩小较小的图标,LoadIconWithScaleDown()
会缩小较大的图标。但是,根据David Heffernan的this answer,我应该尽量避免缩放图标(至少是小图标):
[...]例如,如果系统指标建议使用18px图标,并且您只有16px和20px图标,那么请创建一个新的18px图标。 使用透明像素填充图像,并将16px图标blit到此18px图像的中间。制作图标。 [...]
我想这样做,但出于稳健性的原因,我不想对可用的图标大小做任何假设。 因此,我想在运行时动态确定图标资源的可用图标大小。 但是,我发现的icon functions似乎都没有提供这种功能。
如何找出我的图标资源中可用的图标尺寸(例如IDI_MYICON
)?