设置/缩放控制滚动条的宽度

Mar*_*ryl 5 winapi listview scrollbar winforms dpi-aware

当每个监视器的DPI更改(WM_DPICHANGEDmessage)时,控件的内置滚动条(如列表视图,树视图,丰富编辑,列表框)将不会缩放(按预期)。

未缩放滚动条

它们需要以编程方式进行缩放。

尽管我没有找到用于设置滚动条大小的任何API(在Win32中都没有,在WinForms中也没有)。

我可以使用什么API来设置滚动条的大小(宽度)?

或者至少我该如何掌握滚动条手柄?(我假设滚动条在内部是单独的子控件)一旦有了手柄,就可以MoveWindow用来调整其大小(编辑:我的假设不正确,如@Anders的回答所示)


有关背景,请参阅Windows上的High DPI桌面应用程序开发


有几个看似重复的问题,但实际上都不相关:

那里的答案会更改系统范围的设置或DataGrid仅适用于该设置(在其界面中具有单独的子滚动条控件)。

Mar*_*ryl 2

正如 @Anders 所建议的,Windows 10 Creators Update 中的 Per Monitor V2 DPI 感知解决了这个问题。

\n

缩放控制滚动条

\n

要启用每监视器 V2 DPI 感知,同时仍支持旧版 Windows 10 版本上的旧每监视器 DPI 感知和 Windows 8.1 以及旧版本 Windows 上的 DPI 感知,请按如下所示创建应用程序清单:

\n
<assembly ...>\n    <!-- ... --->\n    <asmv3:application>\n        <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">\n            <dpiAware>True/PM</dpiAware>\n            <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>\n        </asmv3:windowsSettings>\n    </asmv3:application>\n</assembly>\n
Run Code Online (Sandbox Code Playgroud)\n
\n

参考:

\n\n