winforms - 设置/缩放控件滚动条的宽度

标签 winforms listview winapi scrollbar dpi-aware

当每个显示器 DPI 更改 ( WM_DPICHANGED message ) 时, ListView 、 TreeView 、富编辑、列表框等控件的内置滚动条不会缩放(如预期)。

Unscaled scrollbar

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

虽然我没有找到任何 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 缩放改进”和“改进的主题行为”。它还将自动缩放非客户区域。

同时您可以尝试调用EnableNonClientDpiScalingWM_NCCREATE ( added in the Anniversary Update ) 中。

关于winforms - 设置/缩放控件滚动条的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42674498/

相关文章:

c# - 将链接标签添加到绑定(bind)到 DataSet 的 DataGridView 单元格或列

winforms - ReportViewer - LocalReport - 合并报告?

c# - RunWorkerCompleted 未在主 UI 线程中执行?

android - 如何从 Listview 编辑文本字段中获取文本值......?

java - 实例化后,列表可以以某种方式分配给另一个类的列表吗?

c++ - 在c++中的区域语言设置下获取当前位置值

c# - 在 ListView 中更改颜色线

C# WPF ListView 更新

C# PInvoke 通过 Win32 API 获取文件和文件夹的 ACL

c++ - __finally 应该在 EXCEPTION_CONTINUE_SEARCH 之后运行吗?