GDI整体剪报界限

时间:2015-01-27 16:38:17

标签: c# winforms graphics gdi+ gdi

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 vs GDI+ : Clipping

有没有办法为整体GDITextRenderer提供简单的剪裁区域?

非常感谢

1 个答案:

答案 0 :(得分:3)

尝试使用PreserveGraphicsClipping格式标志:

  TextRenderer.DrawText(e.Graphics, "Testing", font, new Point(150, 28),
                        Color.Black, Color.Empty,
                        TextFormatFlags.PreserveGraphicsClipping);