在dpi感知应用中使用SizeGripStyle
本文关键字:SizeGripStyle 应用 dpi 感知 | 更新日期: 2023-09-27 18:12:24
我有一个问题,在不同的DPI的形式的属性SizeGripStyle。我的表单属性AutoScaleMode设置为字体,并启用缩放使用API(因为ClickOnce应用程序)。握把不知怎么地在形状下面。在网上我没有找到任何提及。如果可能的话,你知道怎么修理它吗?
这里有握把在不同DPI下的行为图
程序使用c# 4.0和WF编写
这是Windows本身的错误。Winforms要求视觉样式渲染器绘制手柄。它把工作搞砸了,不是把它做大,而是把它做小。它实际上都不应该这样做,你指定了它应该用握把填充的矩形。一个bug,不幸的是,对于视觉样式渲染器来说并不罕见。
你对此无能为力,希望他们有一天能修复这个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);
}
不像你从视觉样式渲染中得到的"酒窝"样式那么漂亮,你也可以考虑画一个位图,但是你需要几个版本来匹配DPI