首页 > 解决方案 > CCM_DPISCALE 通用控制消息

问题描述

我一直在更新现有的 Win32 应用程序以了解 DPI。按照 MSDN 和其他网站上的各种指南,我根据当前显示器 DPI 手动缩放坐标和字体大小。

我只是偶然发现了这条消息:CCM_DPISCALE。文档说:

在树视图控件、列表视图控件、ComboBoxEx 控件、标题控件、按钮、工具栏控件、动画控件和图像列表中启用自动每英寸高点 (dpi) 缩放

但它实际上了什么?我尝试将消息发送到我的控件,如下所示:

SendMessage(hWnd, CCM_DPISCALE, (WPARAM) TRUE, 0);

但它对字体、大小、布局没有明显的影响——任何东西,任何 DPI。

Comclt32.dll根据文档,我使用的是 6.0 版。

在谷歌搜索时,我可以找到该消息的唯一参考是那个 MSDN 页面,以及来自LVCOLUMNA文档的链接。

这条消息实际上应该做什么?

标签: winapi

解决方案


我至少弄清楚了它的作用的一小部分。

ListView控件中,如果使用固定宽度 ( LVCFMT_FIXED_WIDTH) 创建列并且只要您不指定LVCFMT_NO_DPI_SCALECCM_DPISCALE将根据当前 DPI 缩放列宽。

如果您有一个分组LVS_REPORT样式ListView,并且组标题包含一个图像 ( LVGF_TITLEIMAGE),该图像也将被缩放(但不是组文本 ( LVGF_HEADER))

我没有测试此缩放是否针对每个监视器,并且我没有发现此消息所做的其他任何事情(尽管根据我的问题,它被记录为影响多个控件)。我有兴趣找出这条消息还有什么作用!


推荐阅读