?? frmdragdropfiles.frm
字號:
VERSION 5.00
Begin VB.Form frmDragDropFiles
AutoRedraw = -1 'True
Caption = "文件拖放的演示"
ClientHeight = 3570
ClientLeft = 1575
ClientTop = 1530
ClientWidth = 6045
LinkTopic = "Form1"
ScaleHeight = 238
ScaleMode = 3 'Pixel
ScaleWidth = 403
Begin VB.ListBox List1
Height = 2790
Left = 0
TabIndex = 1
Top = 720
Width = 6015
End
Begin VB.Label Label1
Caption = " 從EXPLORE中選擇一個或多個文件文件,并將它拖放到下面的列表框中:"
BeginProperty Font
Name = "宋體"
Size = 9.75
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 480
Left = 120
TabIndex = 0
Top = 120
Width = 5835
End
End
Attribute VB_Name = "frmDragDropFiles"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'-------------------------------------------
' 采用子類派生技術實現的文件拖放
'-------------------------------------------
' 洪恩在線 求知無限
'-------------------------------------------
'程序說明:
'本例是采用子類派生技術實現的文件從EXPLORE到VB程序的拖放
' 通過三個API函數DragAcceptFiles、DragQueryFiles和
'DragFinish,并通過回調函數WindowProc,窗口屬性函數
'SetWindowLong、CallWindowProc的使用實現,而另一種同樣
'效果的實現方法:OLE拖放,你可以參照文件拖放的另外一個實
'例。
'-------------------------------------------
Option Explicit
Private Const GWL_WNDPROC As Long = (-4&)
' API call to alter the class data for this window
Private Declare Function SetWindowLong& Lib "user32" Alias "SetWindowLongA" (ByVal hWnd&, _
ByVal nIndex&, ByVal dwNewLong&)
Private Sub Form_Load()
'定義 Picture1作為接收文件拖放的容器
DragAcceptFiles Me.hWnd, 1&
'整個procOld變量用來存儲窗口的原始參數,以便恢復
' 調用了 SetWindowLong 函數,它使用了 GWL_WNDPROC 索引來創建窗口類的子類,通過這樣設置
'操作系統發給窗體的消息將由回調函數 (WindowProc) 來截取, AddressOf是關鍵字取得函數地址
procOld = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf WindowProc)
'AddressOf是一元運算符,它在過程地址傳送到 API 過程之前,先得到該過程的地址
End Sub
Private Sub Form_Unload(Cancel As Integer)
'此句關鍵,把窗口(不是窗體,而是具有句柄的任一控件,這里指Picture1)的屬性復原
Call SetWindowLong(Me.hWnd, GWL_WNDPROC, procOld)
End Sub
Public Sub DropFiles(ByVal hDrop&)
Dim sFileName$, IReturn&
Dim nCount&, I As Integer
'為sFileName分配存儲空間
sFileName = String$(MAX_PATH, vbNullChar)
'通過文件指針hDrop, DragQueryFile返回是否有文件拖放,nCount返回拖放文件的個數
nCount = DragQueryFile(hDrop, -1, sFileName, MAX_PATH)
'循環讀取每一個拖放的文件,把它在列表框中顯示出來
For I = 0 To nCount - 1
sFileName = String$(MAX_PATH, vbNullChar)
'如果有文件拖放,接收文件名,并試圖把它在圖片框中打開
'IReturn&
IReturn& = DragQueryFile(hDrop, I, sFileName, MAX_PATH)
List1.AddItem Left$(sFileName, IReturn)
Next I
'完成拖放操作
DragFinish hDrop
End Sub
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -