3

我正在尝试找到某种方法在 WinForms 中使用视觉样式绘制大 DPI UI 字形。例如,如果我在 windows 中将 DPI 设置为 100%,无论我如何尝试绘制样式单选按钮,它最终都会看起来像这样:WinForms 单选按钮 100% DPI如果我在 windows 中将 DPI 增加到 150%,单选按钮看起来不错和大:WinForms 单选按钮 150% DPI

我找不到任何方法来绘制上面的大 DPI 单选按钮,而不更改 Windows 用户配置文件范围的 DPI 设置。我不想在任何其他应用程序中使用大型 UI 元素。到目前为止,这是我尝试(不成功)的事情:

  • 表单的 AutoScale* 属性 - 不影响 UI 字形大小
  • 调用 UI 字形绘制例程之前的 Graphics.ScaleTransform() - 如果启用了视觉样式,则不会影响 UI 字形大小
  • ControlPaint 方法 - 允许我绘制缩放的 UI 字形,但只能没有视觉样式 ( WinForms 单选按钮没有视觉风格)
  • 直接使用 VisualStyleRenderer - (据我所知)无法更改绘制的 UI 字形大小

我要避免的解决方案:

  • 在可执行文件中嵌入预渲染的 UI 字形 - 我需要我的应用程序遵循所选的 windows 用户配置文件范围的视觉样式,因此这种方法很快就会变得非常复杂且难以维护,因为未来的 windows 版本将添加不同的视觉样式。
  • 切换到 WPF - 客户端需要 WinForms 并且所涉及的重构量将是荒谬的(这是一个相当大的应用程序)

那么考虑到上述两个限制,有什么办法可以做到这一点?也许以某种方式欺骗 VisualStyleRenderer 或以某种方式强制 DPI 用于单个进程?欢迎任何想法、提示和 WinAPI hack。

4

0 回答 0