天天看点

VC++拖拽文件到对话框

  • 版本

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日

继续阅读