明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

用VB完成網(wǎng)絡(luò)螞蟻的拖放窗口

[摘要]作者:武漢 艾軍在網(wǎng)絡(luò)螞蟻的查看菜單中,有菜單項(xiàng)名叫"拖放窗口",當(dāng)我們需要下載文件時(shí),只要把網(wǎng)頁(yè)中的超鏈接拖到這個(gè)"窗口"里就能順序的進(jìn)行文件的下載,下面我們就在 VB 中嘗試制做這種"拖放窗口"。第一步,我們先要使"窗口&q...
作者:武漢 艾軍

在網(wǎng)絡(luò)螞蟻的查看菜單中,有菜單項(xiàng)名叫"拖放窗口",當(dāng)我們需要下載文件時(shí),只要把網(wǎng)頁(yè)中的超鏈接拖到這個(gè)"窗口"里就能順序的進(jìn)行文件的下載,下面我們就在 VB 中嘗試制做這種"拖放窗口"。
第一步,我們先要使"窗口"永遠(yuǎn)顯示在第一位。
因?yàn)槲覀冊(cè)跒g覽網(wǎng)頁(yè)時(shí),要開(kāi)許多 IE 窗口,那當(dāng)然不能讓這個(gè)拖放窗口被 IE 窗口覆蓋到,這個(gè)技巧可以用 API 函數(shù) SetWindowPos 來(lái)實(shí)現(xiàn)。
第二步,我們要制作無(wú)邊框的窗口。(沒(méi)有標(biāo)題欄)
因?yàn)檫@樣看起來(lái)比較專業(yè),這個(gè)技巧比較容易,可以通過(guò)設(shè)置 Form 的 BorderStyle 屬性來(lái)實(shí)現(xiàn)。
第三步,我們要能用鼠標(biāo)拖動(dòng)這個(gè)窗口。
因?yàn)槲覀兊牡诙讲僮鳎捎谶@個(gè)窗口沒(méi)有了標(biāo)題欄,只能通過(guò) API 函數(shù) ReleaseCapture、SendMessage 來(lái)實(shí)現(xiàn)窗口的拖動(dòng)。
第四步,我們要使這個(gè)窗口接受拖放。(就是拖超鏈接呀)
這步最關(guān)鍵,不過(guò)也最簡(jiǎn)單,只要設(shè)置 Form 的OLEDropMode 屬性就行了。
好了,步驟完成,現(xiàn)在開(kāi)始程序的完整代碼了:
Private Declare Function ReleaseCapture Lib "user32" () As Long 注釋:釋放鼠標(biāo)捕獲
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 注釋:向窗口進(jìn)程發(fā)送消息
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 = "你拖放的是網(wǎng)頁(yè)地址,地址是"
Const strWebImage = "你拖放的是網(wǎng)頁(yè)圖象,圖象將保存到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        注釋:設(shè)置窗口大小、位置、順序
   
Private Sub Form_Load()

注釋:窗口的屬性分別為:(請(qǐng)?jiān)谠O(shè)計(jì)窗口中定義)
注釋: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函數(shù)SetWindowPos將窗口設(shè)置為總在最前面以捕捉拖放操作
End Sub

Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) 注釋:拖放操作時(shí)發(fā)生
On Error Resume Next
    Effect = vbDropEffectCopy
    If Data.GetFormat(vbCFText) Then        注釋:拖放的是網(wǎng)頁(yè)地址
        MsgBox strWebSite + Data.GetData(vbCFText)
    ElseIf Data.GetFormat(vbCFDIB) Then     注釋:拖放的是網(wǎng)頁(yè)圖象
        MsgBox strWebImage
    End If
End Sub

Private Sub Form_DblClick()
    Unload Me 注釋:雙擊窗口時(shí),退出程序
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& 注釋:使窗口可以通過(guò)鼠標(biāo)拖動(dòng)
End Sub



OK,至此所有的工作都已完成,大家可以自己運(yùn)行程序試一試,打開(kāi)網(wǎng)頁(yè)拖動(dòng) 1 個(gè)超鏈接到這個(gè)窗口,將通過(guò) MsgBox 顯示該超鏈接的地址,如果拖動(dòng)是的一個(gè)圖像,則顯示是一個(gè)圖像。
這只是一個(gè)簡(jiǎn)單的例子,在此基礎(chǔ)上進(jìn)一步修改完善就可以運(yùn)用到其他的許多方面 ,這些就留給朋友自己去思考吧。程序在 VB6.0、Windows 98 下運(yùn)行良好,如果大家對(duì)此還有什么問(wèn)題,請(qǐng)到 www.d1vb.com 來(lái)一起討論。(對(duì)編輯的話:這是一個(gè) VB 論壇,我總在上面)。