程序支持文件拖放会使程序使用起来更加方便。
当我们从shell(window的文件浏览器)中拖入一个文件到应用程序窗口时,windows会发生一个消息WM_DROPFILES给程序,支持文件拖放操作的本质就是程序要适当地处理这个消息。并不是所有程序都可以接受文件拖放消息,只有具有WS_EX_ACCEPTFILES窗口属性的窗口,才能收到这条消息。当使用WIN32 API进行编程时,就要在创建这个窗口时加上这个扩展属性。
如果是MFC程序,则可以在创建程序时,在向导中选择窗口的Accept Files属性,也可以在窗口创建的时候(比如OnCreate函数)调用窗口的成员函数DragAcceptFiles(TRUE),效果是一样的。
支持文件拖放时,主要会涉及到以下三个API函数:DragQueryFile、DragQueryPoint、DragFinish。
它们的原型和注解分别如下:
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,则函数将返回实际所需的缓冲区长度。
BOOL DragQueryPoint(HDROP hDrop, LPPOINT lppt);
这个函数用来获取,当拖放操作正在进行时,鼠标指针的位置。第二个参数lppt是一个指向POINT结构体的指针,用来保存文件放下时,鼠标指针的位置。窗口可以调用该函数以查询文件是否落在自己的窗口矩形中。
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);
}
分享到:
相关推荐
通过查看`draganddrop_src`中的代码,你可以看到如何在MFC对话框工程中集成文件拖放的完整流程,包括消息处理、`COleDropTarget`和`COleDropSource`的使用等。 7. **调试与测试** 实现拖放功能后,确保在实际环境...
在Microsoft Foundation Classes (MFC)框架中,处理拖放文件或文件夹的事件涉及到Windows的消息机制,特别是WM_DROPFILES消息。这个消息会在用户从资源管理器或其他可拖放源拖动文件或文件夹到应用程序的窗口时触发...
本文将深入探讨如何利用MFC实现文件拖放功能,以便用户能够通过简单地将文件或文件夹拖放到窗口上来执行特定操作。 文件拖放功能是Windows应用程序中常用的一种交互方式,它可以提升用户体验,使用户能直观、方便地...
通过以上步骤,你可以成功地在MFC程序中实现文件拖放到编辑框的功能。这不仅提升了用户体验,也简化了文件导入的操作流程。在实际编程中,可能还需要根据具体需求进行调整和优化,比如添加多选文件的支持,或者处理...
通常,数据以 IDataObject 接口的形式传递,包含多种格式的数据,如CF_HDROP,用于处理文件拖放。 5. **设置拖放样式**:为了允许用户将文件拖放到对话框上,需要在对话框的资源定义中设置DS_DROPTARGET样式。 四...
在这个"DropFile拖放文件示例"中,我们将深入探讨如何在MFC应用程序中实现文件拖放功能。 拖放功能是用户界面中常见的一种交互方式,允许用户通过鼠标将文件从资源管理器或其他位置直接拖到程序窗口中,以便进行...
在这个特定的例子中,“C++使用MFC下载文件显示进度条.rar”是一个包含源代码的压缩包,用于演示如何使用MFC来实现一个具有文件下载功能并同时显示下载进度的应用程序。 首先,我们需要理解MFC中的进度条控件...
本教程将深入探讨如何利用MFC来实现文件拖放(Drag and Drop)功能,使得用户可以通过鼠标拖动文件到应用程序窗口上来完成文件的操作或传输。 文件拖放是Windows操作系统的常见特性,它提供了直观且用户友好的交互...
**创建第一个MFC应用程序** Microsoft Foundation Class (MFC) 是微软提供的一套C++类库,它基于Windows API,使得开发者能够更容易地构建Windows应用程序。本教程将详细讲解如何使用Visual Studio来创建你的第一个...
然而,MFC的标准CListCtrl类并不直接支持文件拖放操作,这意味着用户不能直接从桌面或其他窗口将文件拖放到控件中。为了解决这个问题,我们需要对CListCtrl进行子类化,并实现自定义的拖放功能。 拖放操作在Windows...
【标题解析】 "MyUI 支持BMP文件拖放换肤"这一标题指出,这里涉及的是一款名为MyUI的用户界面库,它具有一个特殊的功能,即...这个系统对于那些希望为自己的应用程序添加个性化换肤功能的开发者具有一定的参考价值。
这只是一个基础的拖放功能,实际应用中可能需要添加错误处理、多文件支持、文件类型检查等功能。 在学习和理解这个示例项目时,你应该深入研究MFC的拖放机制,包括`COleDropTarget`, `COleDropSource`, `...
在Windows应用程序开发中,MFC(Microsoft Foundation Classes)提供了一种高效的方式来构建用户界面,其中包括了文件拖放功能。"MultiFiler"项目就是一个很好的例子,它展示了如何在MFC环境中实现文件的拖放操作,...
在"文件" > "新建" > "项目"中选择"MFC应用程序"模板,然后按照向导的指示完成设置,确保选中"带有主窗口的空应用程序"和"使用对话框作为主窗口"选项。 2. **添加资源文件** 在MFC项目中,资源文件(.rc)用于存储...
在Windows编程中,MFC(Microsoft Foundation Classes)是一个C++库,它为开发Windows应用程序提供了一种方便的方式。本文将详细讲解如何利用MFC实现拖拽文件到列表控件显示,以及如何处理占用中无法删除的文件问题...
在MFC中,我们可以通过重载CWnd::OnDropFiles消息来处理文件拖放事件。用户可以方便地将文本文件从资源管理器拖放到工具窗口,程序会自动读取并显示文件内容。 再者,工具能作为默认程序打开文件,这意味着用户可以...
2. **文件拖放**:文件拖放是用户界面中常见的一种交互方式,用户可以通过鼠标选择一个或多个文件,然后将其拖放到目标位置来执行操作,如复制、移动或打开等。在MFC中,可以通过COleDropTarget类实现拖放操作的接收...
**VC MFC 文件浏览程序详解** 在Windows编程领域,Visual C++(简称VC)与Microsoft Foundation Classes(MFC)框架的结合,为开发者提供了一种高效且强大的开发环境,尤其适用于构建桌面应用程序。本篇文章将深入...
在Visual Studio中,这可以通过"文件" -> "新建" -> "项目" -> "MFC" -> "MFC应用程序"来完成。 创建项目后,你将看到一个默认的对话框资源。为了添加工具条,你需要在资源视图中右键点击"ToolBar"并选择"插入工具...
在这个特定的场景中,我们关注的是如何扩展MFC中的`CEdit`控件,使其支持拖放操作,同时能够过滤掉不希望接收的文件类型。下面将详细介绍这一功能及其实现原理。 `CEdit`是MFC提供的一个编辑框控件,通常用于接收和...