ListCtrl以图标模式(icon)模式使用时,如何能够做到接受文件拖入操作并响应呢?这就是今天要解决的问题。(比如拖入一个文件到listctrl里面以后,listctrl提示并显示文件名称)
在网上找了一大圈,不是特复杂,就是根本不管用。经过实验发现,三步就可以搞定。
首先在窗口中设置主窗体(Dlg窗体)的Extended-Styles里面的Accept Files(接受文件)属性使能。其他的控件(包括listctrl)的该属性必须要设置为非使能(也就是不打勾)。
在CXXXdlg.cpp文件中的消息映射部分添加如下代码
1 |
ON_MESSAGE(WM_DropFILES,InsertFiles) |
在CXXXdlg.h文件中添加
1 |
afx_msg void mydropfiles(HDrop hDropInfo); |
在CXXXdlg.cpp文件中实现这个mydropfiles函数,他就是拖拽响应函数
比如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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); } |