GDI是否有任何设置整体剪裁区域的方法,与GDI + Graphics对象的方式相同?
具体做法是:
Graphics.DrawString
使用 GDI + ,其中包含剪辑边界系统。 TextRenderer.DrawText
使用 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);
}
}
这会产生以下输出:
有没有办法为整体GDI
或TextRenderer
提供简单的剪裁区域?
非常感谢
答案 0 :(得分:3)
尝试使用PreserveGraphicsClipping格式标志:
TextRenderer.DrawText(e.Graphics, "Testing", font, new Point(150, 28),
Color.Black, Color.Empty,
TextFormatFlags.PreserveGraphicsClipping);