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_SCALECCM_DPISCALE 将根据当前 DPI 缩放列宽。

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

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

【讨论】:

以上是关于CCM_DPISCALE 通用控制消息的主要内容,如果未能解决你的问题,请参考以下文章

Modbus通讯协议

通信协议之Modbus协议

Modbus通讯协议简介

通用串行总线控制器?

常见消息队列介绍以及比较总结

u盘通用串行总线控制器被停用后怎么重新启用