📄 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 + -