Picturebox用PSet方法画曲线,鼠标移动快,线条就不连贯了,怎么解决?

hhfh 2007-08-04 02:45:36

mask是Picturebox控件
Private Sub mask_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
md = True
End Sub

Private Sub mask_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'鼠标移动快,线条就不连贯了,怎么解决?
If md Then
mask.PSet (X, Y)
End If
End Sub

Private Sub mask_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
md = False
End Sub
...全文
278 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzyong00 2007-08-05
  • 打赏
  • 举报
回复
Option Explicit
Dim flag As Boolean, flag2 As Integer, myX As Integer, myY As Integer

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
flag = True: flag2 = 1
myX = X
myY = Y
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If flag Then
If flag2 = 1 Then
flag2 = flag2 + 1
Picture1.Line (myX, myY)-(X, Y), vbGreen
Else
Picture1.Line -(X, Y), vbGreen
End If
End If
End Sub

Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
flag = False: flag2 = 1

End Sub
subzero 2007-08-04
  • 打赏
  • 举报
回复
用鼠标画曲线,一般都是用line
嗷嗷叫的老马 2007-08-04
  • 打赏
  • 举报
回复
使用子类化,或者鼠标HOOK吧

它们应该是最精确的了

另外,不要在出现MOVE消息时画线,因为那个过程的速度快慢也是影响线条的因素之一

你想想,如果画一个点需要0.05秒,而你鼠标移动的速度是每秒20象素以上(这种速度应该很常见吧),那你觉得线条还会连续吗...?

还有就是使用API来画....貌似比VB的PSET方法要快些....
sworddx 2007-08-04
  • 打赏
  • 举报
回复
MouseMove事件在鼠标移动速度太快时是不可能连续触发的,所以你还是用Line画比较好。

1,453

社区成员

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

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