c++ - win32 GUI 的拖放支持

标签 c++ c winapi user-interface

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

最佳答案

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

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

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

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

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


关于c++ - win32 GUI 的拖放支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12345435/

相关文章:

c - 如何将物理地址转换为内核模块(x86-64)内的内核页面结构?

c++ - 窗口只会在鼠标移动时更新

c++ - 什么是 (void (*) (void))((uint32_t)&__STACK_END)?

c++ - Boost::Process 编译问题,必须修改 lib 才能使其工作

c++ - boost::spirit::x3 中的简单字符串解析器不起作用

c - fseek 和 SEEK_END 的行为

c++ - 如何将指针映射公开为 const 指针映射?

c - 是否有类似于 TabbedTextOut() 的函数可以像 ExtTextOut() 一样裁剪输出?

c++ - 必须进行哪些更改才能使此 Windows 文本框从 2011 年开始在 2019 年正常运行?

c++ - MFC中如何获取可见显示器的宽度?