对win32 GUI的拖放支持

时间:2012-09-10 04:44:36

标签: c++ c winapi user-interface

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

4 个答案:

答案 0 :(得分:1)

是的,可以使用Win32 API支持拖放功能。你应该看到MSDN RegisterDragDrop function

答案 1 :(得分:1)

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

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

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

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

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

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


    Carries out an OLE drag and drop operation.

WINOLEAPI DoDragDrop(
  IDataObject * pDataObject,  //Pointer to the data object
  IDropSource * pDropSource,  //Pointer to the source
  DWORD dwOKEffect,           //Effects allowed by the source
  DWORD * pdwEffect           //Pointer to effects on the source
);


答案 2 :(得分:0)

对于其他来源,以了解有关Win32拖放功能的更多信息,请点击此处。 通过示例进一步说明 http://anton.maurovic.com/posts/win32-api-approach-to-windows-drag-and-drop/

也许如果没有一些COM,就无法在Windows中实现拖放 代码,但是Anders Karlsson有一个简单的包装器, 吸引通常喜欢简单风格的C / C ++编码人员 Windows(Win32)API。

这里的目标是解释如何在应用程序中不需要COM的情况下完成此操作。

答案 3 :(得分:-1)