首页 >后端开发 >C++ >WinForms 控件如何正确自动缩放到系统字体和 DPI 设置?

WinForms 控件如何正确自动缩放到系统字体和 DPI 设置?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-19 08:16:08823浏览

How Can WinForms Controls Be Properly Auto-Scaled to System Font and DPI Settings?

WinForms 自动缩放:适应系统字体和 DPI 设置

引言

以往的评论经常认为 WinForms 的自动缩放功能不如 WPF。然而,根据作者的研究和测试,WinForms 在 .NET 2.0 中的自动缩放功能有了显着改进。

缩放限制控件

尽管有所改进,WinForms 中某些控件仍然存在缩放限制,应避免使用:

  • AutoSize = False 且继承字体的 Label: 在属性窗口中显式设置控件的字体以使其显示为粗体。
  • ListView 列宽:(重写窗体的 ScaleControl 来纠正此问题)
  • SplitContainer 的 Panel1MinSize、Panel2MinSize 和 SplitterDistance 属性
  • MultiLine = True 且继承字体的 TextBox: 显式设置控件的字体。
  • ToolStripButton 的图像: 在窗体的构造函数中调整 ToolStrip.AutoSize 和 ToolStrip.ImageScalingSize。
  • PictureBox.SizeMode 必须设置为 Zoom 或 StretchImage。
  • TreeView 的图像: 基于 CreateGraphics.DpiX 和 .DpiY 设置 ImageList.ImageSize。
  • 窗体大小: 创建后手动缩放固定大小的窗体。

自动缩放设计指南

为了确保 WinForms 中的正确自动缩放,必须遵循以下准则:

  • 将所有 ContainerControls 的 AutoScaleMode 设置为 Font
  • 将所有 ContainerControls 的 AutoScaleDimensions 设置为 6F, 13F,假设为 96dpi 和默认字体(MS Sans Serif)。
  • 96dpi 下工作 并编辑属性以覆盖 Visual Studio 的 DPI 缩放行为。
  • 避免在容器级别设置字体。
  • 将控件停靠到面板上,而不是直接停靠到 UserControls 上。
  • 动态添加控件时,暂停和恢复布局
  • 将派生自 ContainerControl 的基类的 AutoScaleMode 保持为 Inherit
  • 在代码中定义 MinSize 和 MaxSize,而不是在设计器中。
  • 在容器内一致地使用 停靠或锚定
  • 在 96dpi 下,使设计器中的 窗体大小保持在 1000x680 以下,以避免缩放时裁剪。

以上是WinForms 控件如何正确自动缩放到系统字体和 DPI 设置?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn