我开发NSE。它有文件和文件夹。实现了具有接口ITransferSource的组件。在Drag& Drop(MOVE)方法期间,调用ITransferSource :: MoveItem()。 MOVE必须实现为COPY& DELETE,因此我返回文件的HRESULT_FROM_WIN32(ERROR_NOT_SAME_DEVICE)和E_NOINTERFACE。文件已成功移动,但文件夹不是。以下是资源管理器执行的调用序列:
- ITransferSource :: MoveItem() - 我返回E_NOINTERFACE
- ITransferSource :: OpenItem() - 我返回资源进行阅读
文件夹中。
- IShellItemResources :: GetSize() - 我为文件夹
返回0
- IShellItemResources :: GetAttributes() - 我返回FILE_ATTRIBUTE_DIRECTORY IShellFolder :: EnumObjects() - 资源管理器去了
进入文件夹和枚举儿童项目。对于每个项目,检查是否
item是文件夹。
- ITransferSource :: RemoveItem() - 文件夹已删除
醇>
如您所见,文件夹被复制和删除,但会跳过childer项目。资源管理器知道它们存在(通过EnumObjects),但不会复制它们。