- 版本
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);
}
- 演示
Caesar卢尚宇
2021年2月7日