首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

使用GDI+绘图时的一个有关问题

2012-01-30 
使用GDI+绘图时的一个问题在使用GDI+绘图时使用了双缓冲,虽然绘制的时候不会出现闪烁,但是莫名其妙的是在

使用GDI+绘图时的一个问题
在使用GDI+绘图时使用了双缓冲,虽然绘制的时候不会出现闪烁,但是莫名其妙的是在你不做任何操作的时候Form_Paint事件居然会触发,导致了界面会出现闪烁,代码如下:

VB code
Option ExplicitPrivate Sub Form_Load()    InitGDIPlus    Timer1.Interval = 1    Timer1.Enabled = TrueEnd SubPrivate Sub Form_Paint()    Debug.Print Time & ":paint"End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)    TerminateGDIPlusEnd SubPrivate Sub Timer1_Timer()    Dim gpsMemory As Long    Dim bmpMemory As Long    Dim bmpBackGround As Long    Dim bmpMan As Long    Dim bmpCompass As Long    Dim Graphics As Long        GdipCreateBitmapFromFile StrPtr("d:\2.jpg"), bmpBackGround    GdipCreateBitmapFromFile StrPtr("d:\1.jpg"), bmpMan    GdipCreateBitmapFromFile StrPtr("d:\compass.png"), bmpCompass        GdipCreateBitmapFromScan0 Me.ScaleWidth, Me.ScaleHeight, 0, GpPixelFormat.PixelFormat32bppARGB, ByVal 0, bmpMemory    GdipGetImageGraphicsContext bmpMemory, gpsMemory'    GdipSetSmoothingMode gpsMemory, SmoothingModeAntiAlias    GdipDrawImageRectI gpsMemory, bmpBackGround, 0, 0, Me.ScaleWidth, Me.ScaleHeight    GdipDrawImageI gpsMemory, bmpMan, 0, 0    GdipDrawImageI gpsMemory, bmpCompass, 256, 256        GdipCreateFromHWND Me.hwnd, Graphics    GdipDrawImage Graphics, bmpMemory, 0, 0    GdipDisposeImage bmpMemory    GdipDisposeImage bmpBackGround    GdipDisposeImage bmpMan    GdipDisposeImage bmpCompass    GdipDeleteGraphics gpsMemory    GdipDeleteGraphics GraphicsEnd Sub

谁来告诉我为神马会触发Form_Paint事件?

[解决办法]
Paint 事件


在一个对象被移动或放大之后,或在一个覆盖该对象的窗体被移开之后,该对象部分或全部暴露时,此事件发生。

语法

Private Sub Form_Paint( )

Private Sub object_Paint([index As Integer])

Paint 事件语法包括下列部分:

部分 描述 
object 一个对象表达式,其值是“应用于”列表中的一个对象。 
index 一个整数,用来唯一地标识一个在控件数组中的控件。 


说明

如果需要代码中各种图形方法的输出,则 Paint 事件过程就很有用。使用 Paint 过程,可以确保这样的输出在必要时能被重绘。

使用 Refresh 方法时,Paint 事件即被调用。如果 AutoRedraw 属性被设置为 True,重新绘图会自动进行,于是就不需要 Paint 事件。

如果 ClipControls 属性被设置为 False,在 Paint 事件过程中的绘图方法仅影响该窗体中新暴露的区域;否则,绘图方法将在该窗体未被控件覆盖的所有区域。( Image、Label、Line 和 Shape 控件除外。)

在 Resize 事件过程中使用 Refresh 方法可在每次调整窗体大小时强制对整个对象进行。

注意 对某些任务使用 Paint 事件过程能导致一个层叠事件。通常来说,在下列情况下,要避免用 Paint 事件过程: 

移动一个窗体或控件,或者是调整其大小。


对影响大小或外观的任何变量进行改变,如:设置对象的 BackColor 属性等。


调用 Refresh 方法。 
对上述这些任务来说,Resize 事件可能更为合适。

热点排行