• 版本

VS2012

 

  • 实例说明

在文档视图结构中通过使用DragAcceptFiles函数可以使程序接收拖拽文件,在对话框中也可以添加WM_DROPFILES消息的映射函数来使程序接收拖拽文件。程序运行效果如图所示。

 

  • 关键技术

本实例的实现主要使用DragQueryFile函数。该函数用于获取拖拽文件的文件名称。

基本格式如下:



DragQueryFile(
HDROP hDrop,
UINT iFile,
LPSTR lpszFile,
UINT cch
);


参数说明:

hDrop:文件名缓冲区的句柄。
iFile:文件索引编号,如果iFile值为0xffffffff,返回的是拖拽到窗体上的文件的个数。如果iFile值在0和拖拽文件总数之间,则DragQueryFile复制与文件名存储缓冲区大小适合的文件名称到缓冲区中。
lpszFile:函数返回时,用于存储拖拽文件名称的缓冲区指针。
cch:存储拖拽文件名称缓冲区的大小,即lpszFile指针所指缓冲区的字符数。


 

  • 设计过程

(1)新建一个基于对话框的应用程序。

(2)在对话框中添加列表控件,关联一个控件变量,显示拖入的文件名。

(3)右击设置对话框属性,在ExternedStyle中选中Acceptfiles。

(4)通过ClassWizard设置Dlg类的属性,选择ClassInfo选项,将Messagefilter设置为Window,在Dlg类中添加WM_DROPFILES的消息处理。代码如下:



void CDemoDlg::OnDropFiles(HDROP hDropInfo)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

int ires;
char str[32];
ires = DragQueryFile(hDropInfo, 0xffffffff, NULL, 0);
for (int i = 0; i < ires; i++)
{
DragQueryFile(hDropInfo, i, str, 32);
m_filelist.AddString(str);
}
DragFinish(hDropInfo);

CDialogEx::OnDropFiles(hDropInfo);
}


 

  • 演示

VC++拖拽文件到对话框_拖拽

 

Caesar卢尚宇

2021年2月7日