从OnPaint中的e.ClipRectangle绘制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从OnPaint中的e.ClipRectangle绘制相关的知识,希望对你有一定的参考价值。

我是故意打电话的

Me.Invalidate(MyDesiredRepaintRectangle) 

在我的UserControl中。

在OnPaint事件中,我想从缓冲区位图绘制到e.Graphics:

Protected Overrides Sub OnPaint(e As PaintEventArgs)
  If Not _Buffer Is Nothing Then
    e.Graphics.DrawImage(_Buffer, e.ClipRectangle)
  End If
End Sub

但我在做错了

e.Graphics.DrawImage(_Buffer, e.ClipRectangle)

... 我认为。目前整个_Buffer以拉伸方式绘制,以便它适合e.ClipRectangle。

_Buffer与usercontrol的大小相同。

我不确定如何在没有任何拉伸的情况下将所需部分绘制到e.Graphics上。

有人能告诉我我做错了什么吗?

答案

得到它了:

    If Not _Buffer Is Nothing Then
        e.Graphics.DrawImage(_Buffer, e.ClipRectangle.X, e.ClipRectangle.Y, e.ClipRectangle, GraphicsUnit.Pixel)
    End If

以上是关于从OnPaint中的e.ClipRectangle绘制的主要内容,如果未能解决你的问题,请参考以下文章

无法清除 OnPaint 方法中的自定义控件

关于MFC中的OnPaint和OnDraw

MFC中的Invalidate、OnDraw、OnPaint函数的作用、区别和联系?

OnPaint、Invalidate、Clipping 和 Regions 的最佳实践

wxWidgets第十二课 wxBufferedPaintDC OnPaint函数中的双缓存DC

MFC OnPaint()函数中最先调用CDialog::OnPaint()和最后调用CDialog::OnPaint()的巨大区别