屏幕会闪,怎么办?

superleetiany 2003-11-24 12:22:27
我想产生这样的效果,就是随着我鼠标的移动,有一个长方形跟着移动,可是像我下面这么写代码,屏幕会闪的很厉害,怎么解决呢?谢谢各位.

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture1.Cls
DoEvents
Dim a As Double
For a = X To X + 1 Step 0.001' 这里不用0.001的话,出来的效果,就是一条一条的
'之所以用这个,不用line,,bf的办法,因为我有时候不是长方形
Picture1.Line (a, 0)-(a, 10) '而是一个任意形状,但是这个形状和鼠标的坐标(X,Y)有关系的
Next a
End Sub
...全文
123 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
superleetiany 2004-02-19
  • 打赏
  • 举报
回复
算了 结贴了, 没人告诉我 我想要的,不过还是谢谢大家
superleetiany 2003-12-25
  • 打赏
  • 举报
回复
哪位给出稍微详细点的代码亚,我对api不大精通的
yxgsb 2003-12-17
  • 打赏
  • 举报
回复
去掉 Picture.Cls 这句,用 refresh 也会闪,最好用API建立绘图场景、在绘图场景中,用API绘图,闪得强一点!
flyingscv 2003-12-17
  • 打赏
  • 举报
回复
paintpicture和bitblt一样块
flyingscv 2003-12-17
  • 打赏
  • 举报
回复
回复人: liyan010(我是大坏蛋) ( ) 信誉:100 2003-12-17 15:06:00 得分:0


不咋地啊,rainstormmaster(rainstormmaster)的还是会闪的!

我建议用设置一个PictureBox控件作为"缓存",先在上面画,然后用Bitblt贴图,保证不闪!!

等我写代码先,好久不编了...

回复人: bcmhts(风) ( ) 信誉:100 2003-12-17 18:44:00 得分:0


如果你用PICTURE控件进行动画设计,无论怎么设计,都会闪。
试试API函数

----------------
可以不用APi,一样不
liyan010方法很通用,不过在这里有点牛刀了

bcmhts 2003-12-17
  • 打赏
  • 举报
回复
如果你用PICTURE控件进行动画设计,无论怎么设计,都会闪。
试试API函数
maskzha 2003-12-17
  • 打赏
  • 举报
回复
还有,用图形控件,让它允许拖动。试试看闪不?
maskzha 2003-12-17
  • 打赏
  • 举报
回复
用API函数Rectangle就好多了。
danielinbiti 2003-12-17
  • 打赏
  • 举报
回复
楼主这种方法不好,建议用rainstormmaster(rainstormmaster),创建各个图形的类模块
用循环即使借助hdc,虽说避免闪烁,但速度应该会慢
landongfang 2003-12-17
  • 打赏
  • 举报
回复
最简单是在mouse_up再重新画
liyan010 2003-12-17
  • 打赏
  • 举报
回复
不咋地啊,rainstormmaster(rainstormmaster)的还是会闪的!

我建议用设置一个PictureBox控件作为"缓存",先在上面画,然后用Bitblt贴图,保证不闪!!

等我写代码先,好久不编了...
tyronelg 2003-12-17
  • 打赏
  • 举报
回复
up
feilong215 2003-11-28
  • 打赏
  • 举报
回复
暴强
liaorui 2003-11-28
  • 打赏
  • 举报
回复
rainstormmaster 2003-11-28
  • 打赏
  • 举报
回复
先给一段实现橡皮筋的代码:

Option Explicit
Dim mx As Single, my As Single, flag As Integer

'mx,my为线段的起点位置(x,y)
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
mx = X
my = Y
flag = 1
Picture1.MousePointer = 2
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If flag = 1 Then
Picture1.Cls
Picture1.Line (mx, my)-(X, Y), , B
End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
flag = 0
Picture1.MousePointer = 0
End Sub

我的建议就是避免循环,直接使用line函数,如果需要画其它的图案,可以定义一个模块级变量,在Picture1_MouseMove根据该变量的值画图

类似这样
dim p as integer
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

If flag = 1 Then
Select Case p
Case 0
.....
Case 1
....
Case 2
....
Case 3
....
End Select
End If
End Sub
superleetiany 2003-11-28
  • 打赏
  • 举报
回复
改像素大概可以的,但是我这里的是user,是我自定义的,这样我才可以画图,我再上面画自己的图像,所以不可以用其他的,
tyronelg 2003-11-24
  • 打赏
  • 举报
回复
我也想知道,用什么api函数,
shwen 2003-11-24
  • 打赏
  • 举报
回复
从你的代码上看,在X和X+1之间画了1000条线,太多了,我想只是多了10倍,最好是把 PictureBox的坐标用象素点,这样即不会多画也不会少画。另外,我想你For循环的意识是用垂直扫描线来填充一个多边形区域,这样做自然比较慢,试试看用 API 画图来画你的多边形,程序简单,速度也快很多。
workhand 2003-11-24
  • 打赏
  • 举报
回复
refresh也会闪吧,还是改为象素单位好点
paulone 2003-11-24
  • 打赏
  • 举报
回复
楼上的方法不行,Api好像很麻烦,关注。
加载更多回复(2)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧