winapi - CCM_DPISCALE 通用控制消息
问题描述
我一直在更新现有的 Win32 应用程序以了解 DPI。按照 MSDN 和其他网站上的各种指南,我根据当前显示器 DPI 手动缩放坐标和字体大小。
我只是偶然发现了这条消息:CCM_DPISCALE。文档说:
在树视图控件、列表视图控件、ComboBoxEx 控件、标题控件、按钮、工具栏控件、动画控件和图像列表中启用自动每英寸高点 (dpi) 缩放
但它实际上做了什么?我尝试将消息发送到我的控件,如下所示:
SendMessage(hWnd, CCM_DPISCALE, (WPARAM) TRUE, 0);
但它对字体、大小、布局没有明显的影响——任何东西,任何 DPI。
Comclt32.dll
根据文档,我使用的是 6.0 版。
在谷歌搜索时,我可以找到该消息的唯一参考是那个 MSDN 页面,以及来自LVCOLUMNA文档的链接。
这条消息实际上应该做什么?
解决方案
我至少弄清楚了它的作用的一小部分。
在ListView
控件中,如果使用固定宽度 ( LVCFMT_FIXED_WIDTH
) 创建列并且只要您不指定LVCFMT_NO_DPI_SCALE
,CCM_DPISCALE
将根据当前 DPI 缩放列宽。
如果您有一个分组LVS_REPORT
样式ListView
,并且组标题包含一个图像 ( LVGF_TITLEIMAGE
),该图像也将被缩放(但不是组文本 ( LVGF_HEADER
))
我没有测试此缩放是否针对每个监视器,并且我没有发现此消息所做的其他任何事情(尽管根据我的问题,它被记录为影响多个控件)。我有兴趣找出这条消息还有什么作用!
推荐阅读
- azure - 向 Azure CLI 添加预览扩展时如何禁用(红色)警告?
- jenkins - 如何避免“。”的问题 在 DSL 文件 [Jenkins] 中的标识符中?
- javascript - 如何将参数传递给地图函数中的事件处理程序
- python - 从层次聚类中检索具有 > n 个成员的聚类
- javascript - 当用户将元素滚动到视口中时触发一个函数 – Vanilla JavaScript
- nginx - 入口规则未重定向到部署
- email - 带有文本引用的 SAS 电子邮件
- reactjs - 反应遵循什么架构模式?
- dialogflow-es - 验证插槽填充输入
- android - 如何绕过 JSON 中的“空”值?