我使用 win32 API 创建了带有简单编辑控件和按钮的非 MFC GUI。现在我需要将浏览器 URL 拖放到我的 GUI 应用程序的编辑控件之一中,我该怎么做?Win32 Api 是否支持此功能?
4 回答
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 //指向源效果的指针 );
是的,当然 Win32 API 支持拖放功能。您应该看到MSDN RegisterDragDrop 函数。
对于其他资源来了解更多关于 Win32 的拖放功能,这里是一个链接,它通过示例 http://anton.maurovic.com/posts/win32-api-approach-to-windows-drag-and-解释了更多关于它的信息降低/
也许你不能在没有一些 COM 代码的情况下在 Windows 中实现拖放,但是 Anders Karlsson 有一个简单的包装器,它将吸引通常喜欢 Windows (Win32) API 的简单风格的 C/C++ 编码器。
这里的目标是解释如何在您的应用程序中不需要 COM 的情况下做到这一点。