VB6在picturebox里用GDI+绘图,为什么在绘图之前调用cls方法会导致图形不显示??如何实现预期效果?

代码如下
[code]
Option Explicit
Dim graphics As Long
Dim pen As Long

Private Sub Form_Load()
Picture.AutoRedraw = True
InitGDIPlus
GdipCreateFromHDC Picture1.hDC, graphics
GdipCreatePen1 &HFFFF0000, 1, UnitPixel, pen
Picture1.Cls '如果不加这句,线条没问题。但是添加之后会有问题
GdipDrawLineI graphics, pen, 10, 10, 200, 100
Picture1.Refresh
End Sub

Private Sub Form_Unload(Cancel As Integer)
GdipDeletePen pen '删除这个笔(pen)
GdipDeleteGraphics graphics '释放graphics占用的内存
TerminateGDIPlus
End Sub
[/code]

我想实现的是在timer的每一个周期对picturebox进行重新绘图。那么当然要先cls再画。但是绘图之前的cls为什么会导致失败???应该怎么做?

你的画布(Graphics)是用图片框的DC创建的,而cls方法会重置DC,当然不行了,GDI 有专用的清除画布的函数GdipGraphicsClear追问

如梦方醒啊
Public Declare Function GdipGraphicsClear Lib "gdiplus" (ByVal Graphics As Long, ByVal lColor As Long) As GpStatus
lcolor是什么?背景色吗

这样吗
GdipGraphicsClear graphics, &HFF000000

追答

嗯,lColor是背景色。

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-12-10
可能把画笔清除了。
把Picture1.Cls 提前到第一行就OK了!

关于c#里GDI+绘图问题
首先记住 屏幕是没有记性的 你通过改变窗体大小 使得控件的客户区域暴漏大小改变 会触发控件的重绘事件 它是走paint的 你在其他代码里画过的东西 程序在重绘的时候根本调用不到 举个最简单的例子 假设你在mousemove里画成功了 把窗体最小化-最大化一下 你画的东西就没了 这就是基于GDI绘图的控件...

VS2005 GDI在pictureBox上画图为什么会消失
第一段代码窗口最小化再还原图像就没有了,第二段代码没有这个问题,因为你直接在窗口上画的内容是不会被保存下来了,窗口一重绘图像自然就没有了。而通过对picturebox添加图片的方法,只要图片存在,picturebox的图像就在

vb如何把image图片缩放后给picturebox但是picturebox尺寸不会还原
PictureBox(图片框)是Visual Basic中用来显示图形的基本控件之一,用于在窗体指定位置显示图形信息,它支持多种格式的图形文件,包括位图文件(*.bmp,*.dib)、图标文件(*.ico)、光标文件(*.cur)、图元文件(*.wmf,*.emf),还有Internet 上流行的压缩位图格式的JPEG文件和GIF文件。最重要的功能是可以在...

VB2008中用GDI+画图的问题
因为一刷新图就消失了,控件 TabControl上会自动刷新,在Form1_Paint中绘制可避免 或者改成下面的代码 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click PictureBoxTemperature001.Image = Nothing Dim intWidthAll, intHeightAll As...

有哪位老师知道:用VB6.0图上的按钮控件样式怎么做?谢谢
可以用PictureBox来做,这是比较简单的方法 把PictureBox当做Button来用,把点击的代码写在Picture_click里面就好了 当然也有比较复杂的方法,比如用GDI+绘图,甚至是子类化重绘.不过就太麻烦了

C# 使用GDI+ 实现绘图板中绘制折线功能
最后显示在picturebox控件上,imgbox就是一个picturebox控件 基本思路就是这样,要是画连续折现的话 DrawLine还有另一个参数形式 DrawLine(Pen, PointF[]),PointF[]是一个点数组,DrawLine可以自动按顺序吧这个PointF数组中的点连起来 希望能帮到你,你还可以在msdn里找Graphics类,里面方法很多 ...

VS2008的在C#编程中怎样用图形显示百分比例
private void Form1_Load(object sender, EventArgs e){ this.MouseWheel += new MouseEventHandler(Form1_MouseWheel);} public int i=0;void Form1_MouseWheel(object sender, MouseEventArgs e){ if (e.Delta > 0){ i++;this.Text = "正在向上滚动滑轮"+i.ToString()+"%";pictureBox1....

怎样用VB把一张图片透明的放到Picture里,在线等
'下面是制作Mask图的方法 I = CreateBitmap(W, H, 1, 1, ByVal 0&) '建立单色位图 tHdc(0) = NewMyHdc(DestHdc, 0, 0, I) '为单色图建立新DC,并选入 tHdc(1) = NewMyHdc(DestHdc, W, H) '另建一个彩色图及DC,用于存放Mask图 oc = SetBkColor(NewDc, cc) ...

相似回答