我一直在更新现有的Win32应用程序以识别DPI。遵循MSDN和其他站点上的各种指南,我根据当前监视器DPI手动缩放坐标和字体大小。
我刚发现以下消息:CCM_DPISCALE。文档说:
启用Tree-View中的每英寸高点数(dpi)自动缩放 控件,列表视图控件,ComboBoxEx控件,页眉控件, 按钮,工具栏控件,动画控件和图像列表
但是实际上做什么是什么?我尝试像这样将消息发送到我的控件:
SendMessage(hWnd, CCM_DPISCALE, (WPARAM) TRUE, 0);
但是它对字体,大小,布局-在任何DPI上的任何内容都没有明显的影响。
根据文档,我正在使用Comclt32.dll
6.0版。
在谷歌搜索时,我只能找到该消息的唯一参考是MSDN页面以及来自LVCOLUMNA文档的链接。
这条消息实际上应该做什么?
答案 0 :(得分:0)
我至少知道这件事的一小部分。
在ListView
控件中,如果创建的列具有固定宽度(LVCFMT_FIXED_WIDTH
),并且只要您未指定LVCFMT_NO_DPI_SCALE
,CCM_DPISCALE
就会缩放列宽度根据当前DPI。
如果您拥有LVS_REPORT
样式的ListView
分组样式,并且组标题包含图像(LVGF_TITLEIMAGE
),则该图像也将被缩放(但是不是组文本(LVGF_HEADER
)
我没有测试此缩放比例是否针对每个监视器,并且没有找到此消息可进行的其他任何操作(尽管根据我的问题,已记录为可实现多个控件)。我有兴趣了解此消息的其他用途!