c++ - 如何在不占用系统资源的情况下拖放大量文件?

标签 c++ windows mfc drag-and-drop

我正在开发的程序的其中一个功能是能够将对象从其主窗口拖放到 Windows 资源管理器中作为文件。

为此,我们覆盖了 COleDataSource::OnRenderGlobalData(),并且当格式为 CF_HDROP 时,我们将每个对象保存为一个文件。当对象数量很少时,这很好用。

但是,由于我们现在正致力于支持企业级数量的对象,因此当用户试图将大量对象从我们的应用程序拖到 Windows 资源管理器中时,我们看到了很大的延迟,有时会导致挂起或最终崩溃.

我猜这是因为 OnRenderGlobalData() 被调用了很多次,当然,每次它都必须循环遍历被拖动的对象并保存它们作为文件。

我正在研究覆盖 OnRenderFileData() 的想法,但问题是它一次只处理一个文件。

当用户试图将大量对象拖到 Windows 资源管理器上时,有什么方法可以加快我们的应用程序,最好是将保存循环移动到一个只有在实际放置发生时才能执行一次的地方?

最佳答案

不是创建文件,而是拖动在放置时生成的虚拟数据。提供 CFSTR_FILEGROUPDESCRIPTOR 和 CFSTR_FILECONTENTS。 Here's an example .

关于c++ - 如何在不占用系统资源的情况下拖放大量文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6868245/

相关文章:

java - ArrayDeque 类的字符

.net - System.Serializable 属性在 Windows 10 UWP 应用程序中消失了吗?

c# - 没有CLR的MFC中如何访问Winform ActiveX控件

windows - 如何调用QT_SCALE_FACTOR?

python 桑巴 : user credentials not passed (cli_init_creds)?

c++ - 如何检测窗口当前正在运行模态对话框?

c++ - fprintf 不打印 Unicode 字符

c++ - Visual Studios 2008 中 C++ 开发中的链接错误

接受参数化类型(包括子类型)的 C++ 函数

c++ - 如何在 C++ 中初始化静态 vector 数组成员