【发布时间】:2023-03-31 12:14:01
【问题描述】:
我正在开发的程序的一个功能是能够从其主窗口拖动对象并将它们作为文件拖放到 Windows 资源管理器中。
为此,我们覆盖COleDataSource::OnRenderGlobalData(),并且当格式为CF_HDROP 时,我们将每个对象保存为一个文件。当对象数量很少时,这可以正常工作。
但是,由于我们现在正致力于支持企业级数量的对象,因此当用户尝试将大量对象从我们的应用程序拖到 Windows 资源管理器中时,我们会看到很大的延迟,有时会导致挂起或最终崩溃.
我猜这是因为OnRenderGlobalData() 被调用了很多次,当然,每次它都必须循环遍历被拖动的对象并将它们保存为文件。
我正在研究覆盖 OnRenderFileData() 的想法,但问题是它一次只处理一个文件。
当用户尝试将大量对象拖到 Windows 资源管理器上时,有什么方法可以加快我们的应用程序,最好是通过将保存循环移动到在实际放置时只能执行一次的地方?
【问题讨论】:
-
源对象是什么?他们一开始有文件支持吗?与将同等数量的对象从 Outlook 文件夹拖动到桌面相比,拖放的性能如何?我有一些拖放代码可供参考,但想了解更多有关数据的信息。
-
@selbie:源对象是垂直市场应用程序中的项目,开始时没有文件备份。与从 Outlook 文件夹中拖动相同数量的对象相比,性能似乎明显更快。 (我测试了 60 封电子邮件和 60 个我们的对象。)当用户尝试拖动大量这些对象(数百个或更多,这在大型网站上很常见,例如大学校园、大型建筑物等)进入 Windows 资源管理器。
标签: c++ windows mfc drag-and-drop