当每个监视器DPI发生更改(WM_DPICHANGED
message)时,列表视图,树视图,富编辑,列表框等控件的内置滚动条不会缩放(如预期的那样)。
他们需要以编程方式进行缩放。
虽然我没有找到任何API(在Win32中都没有,只允许在WinForms中)来设置滚动条大小。
我可以使用哪种API来设置滚动条大小(宽度)?
或者至少我是如何抓住滚动条的? (我假设滚动条内部是单独的子控件)一旦我有了句柄,我假设我可以使用MoveWindow
来调整它的大小(编辑:我的假设不正确,因为@Anders的答案显示)
有关背景信息,请参阅High DPI Desktop Application Development on Windows。
有几个看似重复的问题,但实际上没有一个是相关的:
那里的答案要么改变系统范围的设置,要么只为success: function(data) {
this.setState({ movies: [data] }, function() {
console.log(data);
})
}.bind(this),
工作(在其界面中有单独的子滚动条控件)。
答案 0 :(得分:3)
滚动条usually不是单独的窗口。如果窗口使用WS_HSCROLL
/ WS_VSCROLL
样式,则滚动条将在控件本身的非客户区域中实现。
Windows 10 Creators Update将引入名为Per Monitor V2 DPI awareness的内容。这包括子窗口通知,“Windows窗体DPI扩展改进”和“改进主题行为”。它还将自动扩展非客户区域。
在此期间,您可以尝试在WM_NCCREATE
(EnableNonClientDpiScaling
)中致电added in the Anniversary Update。
答案 1 :(得分:2)
正如@Anders所建议的,Windows 10 Creators Update中的Per Monitor V2 DPI感知解决了这个问题。
要启用Per Monitor V2 DPI感知,同时仍然支持旧版Windows 10上的旧Per Monitor DPI感知以及旧版Windows上的Windows 8.1和DPI感知,请使您的应用程序显示如下:
<assembly ...>
<!-- ... --->
<asmv3:application>
<asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
<dpiAware>True/PM</dpiAware>
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
</asmv3:windowsSettings>
</asmv3:application>
</assembly>
参考文献: