⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmdragdropfiles.frm

📁 使用API函数实现的文件的拖放
💻 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 + -