两个picturebox控件,picture2在pictrue1里面 option explicit Private Declare Function ReleaseCapture Lib “user32” () As Long Private Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long private const WM_NCBUTTONDOWN=&HA1 private const HTCAPTION=2 private sub picture1_mousedown(Button As Integer, Shift As Integer, X As Single, Y As Single) if button=1 then releasecapture sendmessage picture2.hwnd,WM_NCBUTTONDOWN,HTCAPTION,0 end if end sub 'picture2的dragmode一定要为0,不能设置成1,否则无法任意拖动
具体来说,要求是这样的,首先我在PICTUREBOX上面画了一个小方框,然后要求能够移动小方框和小方框内的内容,随鼠标移动(可在控件内也可在屏幕任意地方),放下鼠标的时候,方框消失。
Public Declare Function DragQueryFile& Lib "shell32.dll" Alias "DragQueryFileA" (ByVal hDrop&, ByVal iFile&, ByVal lpszFile$, ByVal cch&)
Public Declare Sub DragFinish Lib "shell32.dll" (ByVal hDrop&)拖放文件可用API上面三个实现
用子类技术.监视 WM_DROPFILes=&H233 文件拖放消息.设置拖放文件的接受容器.比如一个文本框.
然后就可以自己处理了...
^_^佩服啊......
不知道是否公源的?
其实,采用API函数调用很容易实现,下面我们以拖动窗体(Form1)为例来具体讲一下实现方法:
1.新建立一个项目,名称为:test.vbp.
2. 填加一个模块,名称为:test.bas,并且在声明部分加入以下代码:
Declare Function ReleaseCapture Lib "user32" () As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_SYSCOMMAND = &H112
Public Const SC_MOVE = &HF012
其中ReleaseCapture函数是用来释放鼠标捕获的,SendMessage函数是一个在WindowsAPI中非常重要的函数,在这里的作用是用来向Windows发送移动窗体的消息。WM_SYSCOMMAND是向Windows发送消息的常量。SC_MOVE是控制移动窗体的常量。请注意:这里SC_MOVE的赋值一定要是&HF012,它表示鼠标对象。
3.在窗体的MouseDown过程中加入以下代码:
ReleaseCapture
SendMessage Form1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
其中ReleaseCapture函数用来释放鼠标捕获,SendMessage函数向Windows发送移动窗体的消息。
4.保存并运行程序,按下鼠标,你会发现窗体会随着鼠标的移动而移动。就和其它著名的应用程序一样。
以上讲述了如何在VB中用鼠标拖动窗体,其实,控件的拖动的原理是一样的。
例如以下代码可以实现图片框的拖动:
ReleaseCapture
SendMessage Picture1.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
其实,运用API函数可以实现许多你意想不到的功能。如果需要更多有关VB的其它经验与技巧。
option explicit
Private Declare Function ReleaseCapture Lib “user32” () As Long
Private Declare Function SendMessage Lib “user32” Alias “SendMessageA” (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
private const WM_NCBUTTONDOWN=&HA1
private const HTCAPTION=2
private sub picture1_mousedown(Button As Integer, Shift As Integer, X As Single, Y As Single)
if button=1 then
releasecapture
sendmessage picture2.hwnd,WM_NCBUTTONDOWN,HTCAPTION,0
end if
end sub 'picture2的dragmode一定要为0,不能设置成1,否则无法任意拖动