对win32 GUI的拖放支持

我使用win32 API创建了非MFC GUI,带有简单的Edit控件和按钮。 现在我需要将浏览器URL拖放到我的GUI应用程序的编辑控件之一,我该怎么做? 是Win32 Api支持这个function吗?

是的,具有Win32 API支持拖放function。 您应该看到MSDN RegisterDragDrop函数 。

COM可以通过以下方式使用:

  IDropSource接口 

由包含拖动数据的对象实现,称为拖动源。 IDropSource接口是您实现在应用程序中提供拖放操作的接口之一。 它包含在拖放操作中用作数据源的任何应用程序中使用的方法。 拖放操作中的数据源应用程序负责:

根据用户的选择确定被拖动的数据。 根据用户的鼠标操作启动拖放操作。 在拖放操作期间生成一些视觉反馈,例如设置光标并突出显示为拖放操作选择的数据。 根据用户的鼠标操作取消或完成拖放操作。 对删除操作引起的原始数据执行任何操作,例如删除拖动移动中的数据。 IDropSource包含为最终用户生成视觉反馈以及取消或完成拖放操作的方法。 您还需要在拖放操作中调用DoDragDrop,RegisterDragDrop和RevokeDragDrop函数。

  IDropTarget接口 

由旨在接受放置的对象实现,称为放置目标.IDropTarget接口是您在应用程序中提供拖放操作所实现的接口之一。 它包含在任何应用程序中使用的方法,这些方法可以在拖放操作期间成为数据的目标。 drop-target应用程序负责:

确定丢弃对目标应用程序的影响。 发生丢弃时合并任何有效的丢弃数据。 将目标反馈传达给源,以便源应用程序可以提供适当的视觉反馈,例如设置光标。 实现拖动滚动。 注册并撤消其应用程序窗口作为放置目标。 IDropTarget接口包含处理所有这些职责的方法,除了将应用程序窗口注册和撤销作为放置目标,您必须为其调用RegisterDragDrop和RevokeDragDrop函数。

  DoDragDrop函数 

由OLE实现并用于启动拖放操作。 一旦操作正在进行,它便于拖动源和放置目标之间的通信。


    执行OLE拖放操作。

 WINOLEAPI DoDragDrop(
   IDataObject * pDataObject,//指向数据对象的指针
   IDropSource * pDropSource,//指向源的指针
   DWORD dwOKEffect,//源允许的效果
   DWORD * pdwEffect //指向源上的效果的指针
 );


拖放代码示例

这里http://www.codeproject.com/Articles/485/The-Complete-Idiot-s-Guide-to-Writing-Shell-Extens

在这里http://www.codeguru.com/cpp/misc/misc/draganddrop/article.php/c349/Drag-And-Drop-between-Window-Controls.htm