Oct*_*oid 2 c# graphics gdi+ gdi winforms
GDI 是否有任何设置整体剪切区域的方法,就像 GDI+ Graphics 对象一样?
具体来说:
Graphics.DrawString使用GDI+,其中包括剪切边界系统。TextRenderer.DrawText使用GDI,但不使用GDI。我的新滚动条系统会Graphics根据需要自动调整绘图区域的大小。在整理使用它的控件时,我将一些内联字符串渲染调用切换到我的文本布局类,该类使用TextRenderer.DrawText. 我不太记得为什么我使用它而不是仅仅使用它Graphics.DrawString,但在重构之前我想检查是否有某种方法可以解决问题。
public class GraphicsClipExample : Form
{
public GraphicsClipExample()
{
this.ClientSize = new Size(this.ClientSize.Width, 100);
}
protected override void OnPaint(PaintEventArgs e)
{
// update the graphics clip area
e.Graphics.Clear(Color.Cyan);
e.Graphics.SetClip(new Rectangle(0, 0, e.ClipRectangle.Width, 50));
e.Graphics.Clear(Color.Magenta);
Font font = new Font("Calibri", 24);
e.Graphics.DrawString("Testing", font, Brushes.Black, 10, 28);
TextRenderer.DrawText(e.Graphics, "Testing", font, new Point(150, 28), Color.Black);
}
}
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:

有没有办法为GDI整体或TextRenderer具体提供一个简单的剪切区域?
非常感谢
尝试使用 PreserveGraphicsClipping 格式标志:
TextRenderer.DrawText(e.Graphics, "Testing", font, new Point(150, 28),
Color.Black, Color.Empty,
TextFormatFlags.PreserveGraphicsClipping);
Run Code Online (Sandbox Code Playgroud)