当每个显示器 DPI 更改 ( WM_DPICHANGED
message ) 时, ListView 、 TreeView 、富编辑、列表框等控件的内置滚动条不会缩放(如预期)。
它们需要以编程方式进行缩放。
虽然我没有找到任何 API(在 Win32 中都没有,更不用说在 WinForms 中)来设置滚动条大小了。
我可以使用什么 API 来设置滚动条大小(宽度)?
或者至少我如何捕获滚动条 handle ? (我假设滚动条内部是单独的子控件)一旦我有了句柄,我假设我可以使用 MoveWindow
调整它的大小(编辑:我的假设是不正确的,正如@Anders的答案所示)
有关背景,请参阅 High DPI Desktop Application Development on Windows .
<小时/>有几个看似重复的问题,但实际上没有一个是相关的:
那里的答案要么更改系统范围的设置,要么仅适用于DataGrid
(其界面中具有单独的子滚动条控件)。
最佳答案
滚动条是 usually不是单独的窗口。如果窗口使用 WS_HSCROLL
/WS_VSCROLL
样式,则滚动条将在控件本身的非客户区域中实现。
Windows 10 创意者更新将引入名为 Per Monitor V2 DPI awareness 的内容。这包括子窗口通知、“Windows 窗体 DPI 缩放改进”和“改进的主题行为”。它还将自动缩放非客户区域。
同时您可以尝试调用EnableNonClientDpiScaling
在 WM_NCCREATE
( added in the Anniversary Update ) 中。
关于winforms - 设置/缩放控件滚动条的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42674498/