MFC实现让ListCtrl接受拖放文件 转
2012-10-17 01:24
267 查看
【引言】拖放操作在电脑中很常用,例如我们经常复制文件就可以按住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) [cpp] view plaincopy 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); [cpp] view plaincopy BOOL DragQueryPoint(HDROP hDrop, LPPOINT lppt); 这个函数用来获取,当拖放操作正在进行时,鼠标指针的位置。第二个参数lppt是一个指向POINT结构体的指针,用来保存文件放下时,鼠标指针的位置。窗口可以调用该函数以查询文件是否落在自己的窗口矩形中。 3.void DragFinish(HDROP hDrop); [cpp] view plaincopy 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接受拖放文件 转
- VC下在对话框上实现接受文件拖放 (Drop files)
- 用MFC实现文件拖放到ListBox
- 【转】用MFC实现文件拖放(获得文件路径)
- MFC对话框接受文件拖放的方法
- 用MFC实现文件拖放到ListBox
- MFC中实现单个控件接收拖拽文件的功能
- 接受文件拖拽窗口的实现
- MFC 实现浏览按钮选择文件
- VMware Tools工具------实现主机与虚拟机的文件共享及拖放(复制粘贴即可)
- ISA2006实现QQ离线文件正常发送接受的方法
- c#窗体支持多个文件拖放的代码实现
- [转]使MFC支持拖放文件的方法
- vmware安装centos以及实现win7和centos自由拖放文件
- VC/MFC实现写Excel文件
- HTML5 实现文件拖放上传
- win7 调试MFC程序之拖放文件
- C#实现文件拖放并打开文件
- VS2008中,MFC对话框类实现类似QQ拖拽上传文件的功能,CWnd::OnDropFiles
- C#窗体支持多个文件拖放的代码实现