CCM_DPISCALE 通用控制消息
Posted
技术标签:
【中文标题】CCM_DPISCALE 通用控制消息【英文标题】:CCM_DPISCALE common control message 【发布时间】:2018-06-28 16:13:47 【问题描述】:我一直在更新现有的 Win32 应用程序以支持 DPI。按照 MSDN 和其他网站上的各种指南,我根据当前显示器 DPI 手动缩放坐标和字体大小。
我偶然发现了这条消息:CCM_DPISCALE。文档说:
在树形视图中启用自动每英寸高点 (dpi) 缩放 控件、列表视图控件、ComboBoxEx 控件、标题控件、 按钮、工具栏控件、动画控件和图像列表
但它实际上做什么?我尝试像这样将消息发送到我的控件:
SendMessage(hWnd, CCM_DPISCALE, (WPARAM) TRUE, 0);
但它在任何 DPI 下对字体、大小、布局都没有明显影响。
根据文档,我正在使用Comclt32.dll
6.0 版。
我在谷歌上搜索此消息时唯一能找到的参考是那个 MSDN 页面,以及来自 LVCOLUMNA 文档的链接。
这条消息实际上应该做什么?
【问题讨论】:
不知道这个消息是做什么的,但是找到了a source file where it's used。您的清单中有兼容性部分吗?如果您未指定与特定操作系统版本的兼容性,系统可能会忽略该消息。 在我的 .exe 头文件中,我有:6.00 operating system version 6.00 subsystem version
不是我的意思。 Targeting your application for Windows.
@zett42 很有趣,谢谢。该链接仅讨论 Windows 8 及更高版本的清单。由于自 Vista 以来(据称!)支持 CCM_DPISCALE,我不确定这是否相关?
示例清单也包括 Vista。
【参考方案1】:
我至少弄清楚了它的作用的一小部分。
在ListView
控件中,如果以固定宽度 (LVCFMT_FIXED_WIDTH
) 创建列,并且只要您不指定 LVCFMT_NO_DPI_SCALE
,CCM_DPISCALE
将根据当前 DPI 缩放列宽。
如果您有一个分组的LVS_REPORT
样式ListView
,并且组标题包含一个图像 (LVGF_TITLEIMAGE
),该图像也将被缩放(但 不是 组文本 (@987654328 @))
我没有测试此缩放是否针对每个监视器,并且我没有发现此消息所做的其他任何事情(尽管根据我的问题,它被记录为影响多个控件)。我很想知道这条消息还有什么作用!
【讨论】:
以上是关于CCM_DPISCALE 通用控制消息的主要内容,如果未能解决你的问题,请参考以下文章