ListCtrl的拖拽文件问题

ListCtrl以图标模式(icon)模式使用时,如何能够做到接受文件拖入操作并响应呢?这就是今天要解决的问题。(比如拖入一个文件到listctrl里面以后,listctrl提示并显示文件名称)
在网上找了一大圈,不是特复杂,就是根本不管用。经过实验发现,三步就可以搞定。
首先在窗口中设置主窗体(Dlg窗体)的Extended-Styles里面的Accept Files(接受文件)属性使能。其他的控件(包括listctrl)的该属性必须要设置为非使能(也就是不打勾)。
在CXXXdlg.cpp文件中的消息映射部分添加如下代码

ON_MESSAGE(WM_DropFILES,InsertFiles)

在CXXXdlg.h文件中添加

afx_msg void mydropfiles(HDrop hDropInfo);

在CXXXdlg.cpp文件中实现这个mydropfiles函数,他就是拖拽响应函数
比如

CXXXdlg::mydropfiles(HDrop hDropInfo) //弹出对话框,显示每一拖拽进来的文件名
{
  UINT count;
  char filePath[300];
  count = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
  if(count)
  {
    for(UINT i=0; i < count; i++)
    {
      int pathLen = DragQueryFile(hDropInfo, i, filePath, sizeof(filePath));
      AfxMessageBox(filePath);
    }
  }
  DragFinish(hDropInfo);
  CDialog::OnDropFiles(hDropInfo);
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注