vb中使用API函数BitBlt的问题?
发布网友
发布时间:2024-10-07 17:52
我来回答
共4个回答
热心网友
时间:2024-12-04 11:20
两种方法:
1.AutoRedraw设置为True,然后系统会给你建立缓冲区,保存你之前的绘制结果,这样每次遮盖部分露出的时候系统会自动为你重绘。不过你每次自己绘制完毕的时候要对图片框调用Refresh,告诉系统我画了新的东西上来了,让系统刷新缓冲区。
2.在图片框的Paint事件里面自己重新绘制。(每次当你的图片框被遮盖的地方重新露出来的时候都会触发Paint事件)
第一种方法比较简单而且相对省资源(假如你的绘制过程非常复杂的话)
热心网友
时间:2024-12-04 11:21
1.AutoRedraw=True当然是可以的 只是每次绘制以后(绘制完成后)都要Refresh一下才能显示内容。
2.可以BitBlt到一个MemDC,然后统一把MemDC Bitblt 到图片框DC上;
Form_Paint中也要把MemDC Bitblt 到窗体DC上
这个是双缓存 其实就是(1).
热心网友
时间:2024-12-04 11:21
PaintPicture其实就是封装了Bitblt的功能,所以它们两个是一回事。
AutoRedraw设为True以后,你必须在用Bitblt之前用Cls清一次画面,比如
Picture1.AutoRedraw = True
Picture1.Cls
For i = 0 To 100
Bitblt Picture1.hDC,.....'画上各种东西
Bitblt Picture1.hDC......'画上再叠加的东西
... ...
Next i
假如你不用Cls,只用Bitblt是画不到Picture1上的。加上Cls不但可以解决你说的覆盖问题,也可以解决图像频繁刷新而闪烁的问题。
热心网友
时间:2024-12-04 11:22
假设你要在Picture1上画,那么请把以下关键代码,加入到你的程序中即可。
Picture1.AutoRedraw = True '允许自动刷新
BitBlt....(略)]
Picture1.Refresh '自动刷新
请注意BitBlt前后两行代码!