MFC实现让ListCtrl接受拖放文件 转
来源:互联网 发布:罗马全面战争mac版 编辑:程序博客网 时间:2024/04/28 10:27
【引言】拖放操作在电脑中很常用,例如我们经常复制文件就可以按住ctrl键不放,然后再拖到另外一个窗口中,或者,可以把一个WORD文档直接拖动到WORD窗口即可打开,以前我使用过VB,里面直接有OleDragDrop事件,进行相应处理即可。那么如何在VC++中通过编程实现该功能呢,这就是本文要介绍的。
【实现】具体做法如下:用ClassWizard类向导新建一个类,取名为CMyListCtrl,基类为CListCtrl,然后在类向导中切换到Message Maps选项卡,选择刚才建立的CMyListCtrl类,为WM_DROPFILES添加消息处理函数(实现拖放的关键也就在这里)
然后在对话框中画一个ListCtrl,按alt+enter进入属性页,点击扩展样式选项卡,勾选“接受文件”,使用类向导添加成员变量,Varable Type变量类型选择刚才新建的CMyListCtrl类,这样,这个ListCtrl就具有了接受拖放文件的功能了。
要处理拖放事件,那么在此函数中处理: void CMyListCtrl::OnDropFiles(HDROP hDropInfo)
【附录】
支持文件拖放时,主要会涉及到以下三个API函数:DragQueryFile、DragQueryPoint、DragFinish。
1.UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch)
这个函数用来取得拖放的文件名。其中,hDrop是一个指向含有被拖放的文件名的结构体的句柄(WIN32 API编程时,这个句柄就是WM_DROPFILES消息的wParam参数,而MFC编程时,则可以从消息处理函数的参数直接得到);iFiles是要查询的文件序号,因为一次可能同时拖动很多个文件;lpszFiles是出口缓冲区指针,保存iFiles指定序号的文件的路径名,cch指定该缓冲区的大小。注意,第一,如果我们在调用该函数的时候,指定iFile为0xFFFFFFFF,则DragQueryFile将忽略lpszFile和cch参数,返回本次拖放操作的文件数目;第二,如果指定lpszFile为NULL,则函数将返回实际所需的缓冲区长度。
2.BOOL DragQueryPoint(HDROP hDrop, LPPOINT lppt);
这个函数用来获取,当拖放操作正在进行时,鼠标指针的位置。第二个参数lppt是一个指向POINT结构体的指针,用来保存文件放下时,鼠标指针的位置。窗口可以调用该函数以查询文件是否落在自己的窗口矩形中。
3.void DragFinish(HDROP hDrop);
当拖放操作处理完毕后需调用该函数释放系统分配来传输文件名的内存。
要处理WM_DROPFILES消息时,可以使用向导给对应的窗口添加消息处理函数,该消息处理函数原型是:void OnDropFiles(HDROP hDrop):
【示例】
- void CDialogDropFileDlg::OnDropFiles(HDROP hDropInfo)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- char szFilePathName[_MAX_PATH+1] = {0};
- //得到文件个数
- UINT nNumOfFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
- for (UINT nIndex=0 ; nIndex< nNumOfFiles; ++nIndex) {
- // 得到文件名
- DragQueryFile(hDropInfo, nIndex, (LPTSTR)szFilePathName, _MAX_PATH);
- // 有了文件名就可以想干嘛干嘛了 :P
- AfxMessageBox((LPCTSTR)szFilePathName);
- }
- DragFinish(hDropInfo);
- CDialog::OnDropFiles(hDropInfo);
- }
- MFC实现让ListCtrl接受拖放文件 转
- MFC listCtrl 拖放文件
- MFC对话框接受文件拖放的方法
- MFC窗口接受拖放
- 【转】用MFC实现文件拖放(获得文件路径)
- 用MFC实现文件拖放到ListBox
- MFC文件拖放
- 让窗体接受拖放, 并获取拖过来的文件信息
- [转]QT实现拖放文件
- MFC OLE拖放实现
- 在Delphi中接受文件拖放
- Flex之接受拖放外部文件
- 再谈用MFC实现文件拖放到编辑框
- 用MFC实现文件拖放到编辑框
- 用MFC实现文件拖放到编辑框
- 再谈用MFC实现文件拖放到编辑框
- 再谈用MFC实现文件拖放到编辑框
- VC下在对话框上实现接受文件拖放 (Drop files)
- Oracle RBO、CBO简介
- Tomcat的class加载的优先顺序一览
- ORACLE EXPLAIN PLAN的总结
- 北京 住房公积金 查询
- MySql中GROUP_CONCAT函数行合并
- MFC实现让ListCtrl接受拖放文件 转
- sas
- poj3087 Shuffle'm Up
- VirtualBox 使用技巧 教程一 VirtualBox安装增强功能
- Re-informed By Tao --- A Mathematica Friend
- 终于还是写了
- 【STM32 .Net MF开发板学习-1】蓝牙遥控智能小车(PC模式)
- linux 解压命令
- 水晶报表的PUSH模式与 PULL模式