Mar*_*ryl 5 winapi listview scrollbar winforms dpi-aware
当每个监视器的DPI更改(WM_DPICHANGEDmessage)时,控件的内置滚动条(如列表视图,树视图,丰富编辑,列表框)将不会缩放(按预期)。
它们需要以编程方式进行缩放。
尽管我没有找到用于设置滚动条大小的任何API(在Win32中都没有,在WinForms中也没有)。
我可以使用什么API来设置滚动条的大小(宽度)?
或者至少我该如何掌握滚动条手柄?(我假设滚动条在内部是单独的子控件)一旦有了手柄,就可以MoveWindow用来调整其大小(编辑:我的假设不正确,如@Anders的回答所示)
有关背景,请参阅Windows上的High DPI桌面应用程序开发。
有几个看似重复的问题,但实际上都不相关:
那里的答案会更改系统范围的设置或DataGrid仅适用于该设置(在其界面中具有单独的子滚动条控件)。
正如 @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参考:
\n