如何创建放置处理程序

默认情况下,文件不是放置目标。 可以通过实现和注册放置处理程序,将 文件类型 的成员转换为 放置目标。

如果为某个文件类型注册了放置处理程序,则每当对象被拖过或拖放到文件类型的成员上时,将调用该处理程序。 Shell 通过在处理程序的 IDropTarget 接口上调用适当的方法来管理操作。

创建 Shell 扩展处理程序中讨论了实现和注册 Shell 扩展处理程序的一般过程。 本文档重点介绍特定于删除处理程序的实现的那些方面。

Instructions

步骤 1:实现放置处理程序

与所有 Shell 扩展处理程序一样,放置处理程序是作为 DLL 实现 (COM) 对象实现的进程内组件对象模型。 除了 IUnknown 之外,它们还导出两个接口: IPersistFileIDropTarget

Shell 通过其 IPersistFile 接口初始化处理程序。 它使用此接口 (CLSID) 请求处理程序的类标识符,并为其提供文件的名称。 有关如何实现 Shell 扩展处理程序(包括 IPersistFile 接口)的一般讨论,请参阅 创建 Shell 扩展处理程序

初始化放置处理程序后,Shell 会在处理程序的 IDropTarget 接口上调用相应的方法。

步骤 2:注册放置处理程序

删除处理程序在此文件类型的子项下注册。

HKEY_CLASSES_ROOT
   ProgID
      shellex
         DropHandler

为处理程序创建名为 的 DropHandler 子项,并将子项的默认值设置为处理程序 CLSID GUID 的字符串形式。 有关如何注册 Shell 扩展处理程序的一般讨论,请参阅 创建 Shell 扩展处理程序

以下示例演示了为示例 .myp 文件类型启用删除处理程序的注册表项。

HKEY_CLASSES_ROOT
   .myp
      (Default) = MyProgram.1
   CLSID
      {00000000-1111-2222-3333-444444444444}
         InProcServer32
            (Default) = C:\MyDir\MyCommand.dll
            ThreadingModel = Apartment
   MyProgram.1
      (Default) = MyProgram Application
      shellex
         DropHandler
            (Default) = {00000000-1111-2222-3333-444444444444}

创建 Shell 扩展处理程序

IDropTarget

IPersistFile