top
Loading...
VB中用API實現文件拖放
借助API函數CallWindowProc、DragAcceptFiles、DragQueryFile、DragFinish同樣可以實現文件從資源管理器EXPLORE到應用程序的拖放,另一種方法是采用OLE拖放,可以參照趣味編程欄目的相關內容。下面我們一起來看看程序編寫的過程。

對于每個需要引用的API函數,我們需要先在程序中說明,如果只在某一窗體內聲明并使用它,則把它聲明為Private,而如果在模塊中聲明,且需要在整個工程內使用它,則需要把它聲明為Public。

Public Declare Function CallWindowProc& Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc&, ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&)
Public Declare Sub DragAcceptFiles Lib "shell32.dll" (ByVal hWnd&, ByVal fAccept&)
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&)
Private Declare Function SetWindowLong& Lib "user32" Alias "SetWindowLongA" (ByVal hWnd&,ByVal nIndex&, ByVal dwNewLong&)

SetWindowLong函數的作用是在窗口結構中為指定的窗口設置屬性,利用它我們來改變窗口的屬性參數,其中各個參數的意義如下表所示:

參數 意義
hwndLong,欲為其取得信息的窗口的句柄
nIndexLong,這里取GWL_WNDPROC,表示設置該窗口的窗口函數的地址
dwNewLongLong,由nIndex指定的窗口信息的新值

返回值 Long,指定數據的前一個值

在默認狀態下WINDOWS操作系統會指定一個窗口函數來接受和處理WINDOWS消息,而通過使用SetWindowLong函數改變窗口函數的地址使它指向我們自己寫的一個函數WindowProc,這樣WINDOWS消息就會轉由WindowProc函數接收和處理。于是我們就能判斷文件拖放的消息并進行處理。改變窗口屬性的語句如下:

procOld = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WindowProc)

DragAcceptFiles、DragQueryFile、DragFinish三個函數的作用分別是:把某個窗口設置為接收拖放的容器、返回拖放的文件的數量和信息、終止拖放。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗