支持DPI的应用程序中的SizeGripStyle

时间:2016-10-10 12:02:20

标签: c# c#-4.0 dpi grip

我在不同的DPI中遇到了表单属性SizeGripStyle的问题。我的表单将属性AutoScaleMode设置为Font并使用API​​启用扩展(因为ClickOnce应用程序)。握把以某种方式低于表格。在互联网上我没有找到任何提及。如果可能的话,知道如何解决它吗?

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

该程序在C#4.0和WF中。

1 个答案:

答案 0 :(得分:1)

这是Windows本身的一个错误。 Winforms asks the visual style renderer来绘制抓地力。它严重影响了工作,而不是让它变大,使它变小。它实际上不应该这样做,你指定它应该用手柄填充的矩形。哎呀,不幸的是视觉风格渲染器并不完全不常见。

你可以做的很少,希望他们有一天能修复这个bug。但有一件事,你必须自己画出握把。将窗体的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);
}

不像" dimple"你从视觉样式渲染得到的风格,你也可以考虑绘制一个位图,但你需要它的几个版本来匹配DPI。