0

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

4

4 回答 4

2

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

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

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

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

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

DoDragDrop 函数
由 OLE 实现,用于启动拖放操作。一旦操作在进行中,它促进了拖动源和放置目标之间的通信。

    执行 OLE 拖放操作。

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


于 2012-09-10T05:03:16.710 回答
1

是的,当然 Win32 API 支持拖放功能。您应该看到MSDN RegisterDragDrop 函数

于 2012-09-10T05:01:23.637 回答
0

对于其他资源来了解更多关于 Win32 的拖放功能,这里是一个链接,它通过示例 http://anton.maurovic.com/posts/win32-api-approach-to-windows-drag-and-解释了更多关于它的信息降低/

也许你不能在没有一些 COM 代码的情况下在 Windows 中实现拖放,但是 Anders Karlsson 有一个简单的包装器,它将吸引通常喜欢 Windows (Win32) API 的简单风格的 C/C++ 编码器。

这里的目标是解释如何在您的应用程序中不需要 COM 的情况下做到这一点。

于 2020-06-04T03:58:57.987 回答