【问题标题】:SizeGripStyle in DPI-aware appDPI 感知应用中的 SizeGripStyle
【发布时间】:2016-10-21 17:08:24
【问题描述】:

我对不同 DPI 中的表单属性 SizeGripStyle 有疑问。我的表单将属性 AutoScaleMode 设置为 Font 并使用 API 启用缩放(因为 ClickOnce 应用程序)。手柄不知何故低于表格。在互联网上我没有找到任何提及。如果可能的话,知道如何解决它吗?

There you have pics of grip's behavior on different DPI

程序采用 C# 4.0 和 WF。

【问题讨论】:

    标签: c# c#-4.0 dpi grip


    【解决方案1】:

    这是 Windows 本身的一个错误。 Winforms asks the visual style renderer 绘制手柄。它严重破坏了工作,而不是让它变得更大,而是让它变得更小。它实际上不应该做任何事情,你指定它应该用夹子填充的矩形。真是个错误,不幸的是,对于视觉样式渲染器来说并不少见。

    您对此无能为力,希望他们有一天会修复该错误。但有一件事,你必须自己抓紧。将表单的 SizeGripStyle 属性设置回 Auto 并覆盖 OnPaint() 以绘制它:

    protected override void OnPaint(PaintEventArgs e) {
        base.OnPaint(e);
        var gripSize = (int)(16 * e.Graphics.DpiX / 96f);
        var rc = new Rectangle(this.ClientSize.Width - gripSize, 
                               this.ClientSize.Height - gripSize, gripSize, gripSize);
        ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc);
    }
    

    不如从视觉样式渲染中获得的“酒窝”样式漂亮,您也可以考虑绘制位图,但需要多个版本来匹配 DPI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多