VC支持文件拖拽功能函数:DragAcceptFiles,DragQueryFile和DragFinish

本文详细介绍了Visual C++中实现文件拖拽功能的三个关键函数:DragAcceptFiles,DragQueryFile和DragFinish。通过具体代码示例展示了如何在对话框中启用文件拖拽,并获取及处理拖拽的文件列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一  VC支持文件拖拽功能的三个函数:DragAcceptFiles,DragQueryFile和DragFinish。

 

1.DragAcceptFiles 确定窗口是否接收文件拖拽。

 

void DragAcceptFiles(HWND hWnd,BOOL fAccept);

 

hWnd:接收文件拖拽功能的窗口句柄。

fAccept:为TRUE则接收文件拖拽,为FALSE不再接收。

 

对话框,可以右击--Properties->Extended Styles,勾选Accept files,从而加上  EXSTYLE WS_EX_ACCEPTFILES 。

 

 

2.DragQueryFile 获得拖拽后的文件名称列表。

 

UINT DragQueryFile(HDROP hDrop,UINT iFile,LPTSTR lpszFile,UINT nLen);

 

hDrop:HDROP标识符,即系统响应函数WindowProc中的wParam参数

iFile:从0开始的文件索引号。如果该参数为0xFFFFFFFF,则返回拖拽的文件个数。

lpszFile:用于存放文件名的缓冲区地址

nLen:缓冲区长度

 

函数返回值:若iFile为0xFFFFFFFF返回拖拽的文件个数,否则返回相应索引号的文件名长度。

 

 

3. DragFinish 释放系统为拖拽功能处理文件名称而分配的内存。

 

void DragFinish(HDROP hDrop);

 

 

二  在对话框中,简单地类向导为其加入WindowProc即可实现

 

LRESULT CDragFileDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 

{

switch (message)

{

case WM_CREATE:

//1 文件拖拽 允许,可放在初始化中

DragAcceptFiles(TRUE);

return 0;

//2 文件拖拽个数,对应的文件名

case WM_DROPFILES:

HDROP hDrop = (HDROP)wParam;

//2.1 参数0xFFFFFFFF ,将获得拖拽文件个数

UINT nFileNum = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); 

char strFileName[MAX_PATH];

for (int i = 0; i < nFileNum; i++)  

{

//2.2 参数 i ,将获得拖拽的第i个文件名

DragQueryFile(hDrop, i, strFileName, MAX_PATH);

 

//a 可将获得的文件名称,放入ListBox中

m_listbox.AddString(strFileName);

 

//b 也可将获得的文件名称,放入vector中

vetFileNames.push_back(strFileName); 

 

}

m_listbox.UpdateWindow();//刷新ListBox

//3 释放拖拽的hDrop

DragFinish(hDrop);   

return 0;

}

return CDialog::WindowProc(message, wParam, lParam);

}

 

 

三  对于vector 方式储存文件名称的还需要

 

1 需要的头文件

#include 《vector》

#include 《cstring》

using namespace std;

vector《string》 vetFileNames; 

 

 

2 在需要的地方,弹出需要的文件名称

 

CString str;

vector《string》::iterator pos;

//在需要的地方,显示拖拽的文件名

for (pos = vetFileNames.begin(); pos != vetFileNames.end(); pos++)

{

 str=pos->c_str();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值