设有两个窗体,form1,form2,代码如下: private sub form1_mousedown(x as single,y as single,button as integer) dim frm as new form2 frm.left=me.left frm.top=me.top end sub
Option ExplicitDim sngX As Single, sngY As SinglePrivate Sub Form_Load() Form2.Show End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) sngX = X: sngY = Y End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then Me.Move Me.Left + X - sngX, Me.Top + Y - sngY Form2.Move Form2.Left + X - sngX, Form2.Top + Y - sngY End If End Sub
End Sub ================================================================== ''''form2:(放一个TIMER) Private Sub Form_Load() Timer1.Interval = 100 Timer1.Enabled = True End SubPrivate Sub Timer1_Timer() If Me.Left <> Form1.Left + Form1.Width Then Me.Left = Form1.Left + Form1.Width If Me.Top <> Form1.Top Then Me.Top = Form1.Top End Sub
private sub form1_mousedown(x as single,y as single,button as integer)
dim frm as new form2
frm.left=me.left
frm.top=me.top
end sub
Form2.Show
End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
sngX = X: sngY = Y
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Me.Move Me.Left + X - sngX, Me.Top + Y - sngY
Form2.Move Form2.Left + X - sngX, Form2.Top + Y - sngY
End If
End Sub
Private Sub Form_Load()
Form2.Move Form1.Left + Form1.Width, Form1.Top
Form2.Show vbModeless, Form1
End Sub
==================================================================
''''form2:(放一个TIMER)
Private Sub Form_Load()
Timer1.Interval = 100
Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()
If Me.Left <> Form1.Left + Form1.Width Then Me.Left = Form1.Left + Form1.Width
If Me.Top <> Form1.Top Then Me.Top = Form1.Top
End Sub
1.用GETWINDOWLONG取得要拖动窗体的WIN PROC的地址
2.用SETWINDOWLONG设置该窗体的新的WIN PROC地址为我们自定义的窗体函数地址
3.在自定义的窗体函数针对移动窗体的消息用SENDMESSAGE转发一条移动消息给被带动窗体
4.在程序终结的时候用SETWINDOWLONG将原来的WIN PROC替换回来
具体的API和过程请自己参考MSDN
解决这个问题必须用API,查一下吧。
给你个麻烦的办法:自定义窗体处理函数这个办法是麻烦地但是效率比较好,也比较准确,直接使用FORM的鼠标事件有时候有误判或漏判具体是:
1.用GETWINDOWLONG取得要拖动窗体的WIN PROC的地址
2.用SETWINDOWLONG设置该窗体的新的WIN PROC地址为我们自定义的窗体函数地址
3.在自定义的窗体函数针对移动窗体的消息用SENDMESSAGE转发一条移动消息给被带动窗体
4.在程序终结的时候用SETWINDOWLONG将原来的WIN PROC替换回来
具体的API和过程请自己参考MSDN
可不可以给一段代码实例?我一直不太明白这几个api函数的应用方法