我有一个用CListCtrl样式创建的ListView控件(或Win32中的LVS_REPORT)。

我打算在其项目中显示图标,例如:

但是问题是我需要制作和加载多少大小的图标?

让我解释。从旧的Win32示例中,我可以看到每个人都使用15x15像素的图标创建图像列表。但是这些问题是,在具有更高DPI settings的任何现代PC上,它看起来都像是可怕的像素。因此,我正在寻找一种动态方法来确定CListCtrl的图像列表的适当大小。

也是问题的第一部分,我最初应该使图标大小是多少?

编辑
PS:自从DPI缩放出现以来,您如何找到它?我目前正在使用以下方法:

//No error handling for brevity
HDC hDC = ::GetDC(hAppsMainWindowHandle);
int nCx = ::GetDeviceCaps(hDC, LOGPIXELSX);
int nCy = ::GetDeviceCaps(hDC, LOGPIXELSY);
::ReleaseDC(hAppsMainWindowHandle, hDC);

//I technically get horizontal & vertical scaling --
//can those be different?
double scalingCx = (double)nCx / 96.0;  //1.0 = 100%
double scalingCy = (double)nCy / 96.0;

字体缩放是否有所不同?

最佳答案

列表 View 根据其模式使用“小”或“大”图像列表。在报告模式下,它使用“小”图像列表。您可以使用 GetSystemMetrics() 通过SM_CXSMICONSM_CYSMICON指标获取“小”图像的尺寸(对于“大”图像,请使用SM_CXICONSM_CYICON)。

请注意,如果您的应用程序不支持DPI,则返回的值将是虚拟的/缩放的,因此,要获取准确的值,请通过 SetProcessDPIAware() SetProcessDpiAwareness() 或DPI list 确保它是DPI感知的。

更新:我刚遇到此功能,在编写支持DPI的应用程序时可能对您有用:

LoadIconWithScaleDown()

制作较大的图像,然后让API将其缩小为较小的尺寸。

关于c++ - 我需要为应用程序制作和加载多少大小的ImageList图标(考虑更高的DPI)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24225791/

10-13 05:37