在VB里面好简单:为什么用Delphi挺难?
标题 :用 VB 实现网络蚂蚁的拖放窗口
作者:武汉 艾军
在网络蚂蚁的查看菜单中,有菜单项名叫"拖放窗口",当我们需要下载文件时,只要把网页
中的超链接拖到这个"窗口"里就能顺序的进行文件的下载,下面我们就在 VB 中尝试制做这
种"拖放窗口"。
第一步,我们先要使"窗口"永远显示在第一位。
因为我们在浏览网页时,要开许多 IE 窗口,那当然不能让这个拖放窗口被 IE 窗口覆盖
到,这个技巧可以用 API 函数 SetWindowPos 来实现。
第二步,我们要制作无边框的窗口。(没有标题栏)
因为这样看起来比较专业,这个技巧比较容易,可以通过设置 Form 的 BorderStyle
属性来实现。
第三步,我们要能用鼠标拖动这个窗口。
因为我们的第二步操作,由于这个窗口没有了标题栏,只能通过 API 函数 ReleaseCapture、
SendMessage 来实现窗口的拖动。
第四步,我们要使这个窗口接受拖放。(就是拖超链接呀)
这步最关键,不过也最简单,只要设置 Form 的OLEDropMode 属性就行了。
好了,步骤完成,现在开始程序的完整代码了:
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 '向窗口进程发送消息
Const HTCAPTION = 2
Const WM_NCLBUTTONDOWN = &HA1
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const HWND_TOPMOST = -1
Const SWP_SHOWWINDOW = &H40
Const strWebSite = "你拖放的是网页地址,地址是"
Const strWebImage = "你拖放的是网页图象,图象将保存到PictureBox中"
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long,
ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long,
ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
'设置窗口大小、位置、顺序
Private Sub Form_Load()
'窗口的属性分别为:(请在设计窗口中定义)
'Form1.Height = 570
'Form1.Left = 150
'Form1.Top = 200
'Form1.Width = 570
'Form1.BackColor = &HFFFF00
'Form1.BorderStyle = 1
'Form1.OLEDropMode = 1 '使Form1可以接受OLE拖放
'Form1.ControBox=False
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or
SWP_NOSIZE Or SWP_SHOWWINDOW
' 使用Windows API函数SetWindowPos将窗口设置为总在最前面以捕捉拖放操作
End Sub
Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long,
Button As Integer, Shift As Integer, x As Single, y As Single) '拖放操作时发生
On Error Resume Next
Effect = vbDropEffectCopy
If Data.GetFormat(vbCFText) Then '拖放的是网页地址
MsgBox strWebSite + Data.GetData(vbCFText)
ElseIf Data.GetFormat(vbCFDIB) Then '拖放的是网页图象
MsgBox strWebImage
End If
End Sub
Private Sub Form_DblClick()
Unload Me '双击窗口时,退出程序
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer,
x As Single, y As Single)
ReleaseCapture
SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0& '使窗口可以通过鼠标拖动
End Sub
OK,至此所有的工作都已完成,大家可以自己运行程序试一试,打开网页拖动 1 个超链接
到这个窗口,将通过 MsgBox 显示该超链接的地址,如果拖动是的一个图像,则显示是一
个图像。
这只是一个简单的例子,在此基础上进一步修改完善就可以运用到其他的许多方面 ,
这些就留给朋友自己去思考吧。程序在 VB6.0、Windows 98 下运行良好,如果大家对此还
有什么问题,请到 www.d1vb.com 来一起讨论。(对编辑的话:这是一个 VB 论坛,我总
上面)。