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);
}