【问题标题】:Drag and Drop Support for win32 GUI对 win32 GUI 的拖放支持
【发布时间】:2012-09-02 22:48:46
【问题描述】:

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

【问题讨论】:

  • >我已经使用 win32 API 创建了带有简单编辑控件和按钮的非 MFC GUI.......您是否选择启动此 GUI 知道那里以后会有更多的要求吗?
  • this的回答,是关于拖拽文件的,不过应该可以和浏览器URL一起使用(可能需要一些额外的解析)。
  • Drag and drop in winapi的可能重复

标签: c++ c winapi user-interface


【解决方案1】:

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 //指向源效果的指针 );

【讨论】:

  • 要添加到这一点,拖动一个 URL 将在提供的IDataObject 中以CFSTR_INETURLCFSTR_SHELLURL 格式显示它。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    要了解更多有关 Win32 拖放功能的其他来源,请点击此处的链接 用例子解释了更多关于它的信息 http://anton.maurovic.com/posts/win32-api-approach-to-windows-drag-and-drop/

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

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

    【讨论】:

      【解决方案4】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多