gpt4 book ai didi

c++ - 与 VCL 窗体一起使用时 IDropTarget 出现问题

转载 作者:行者123 更新时间:2023-11-28 01:13:01 24 4
gpt4 key购买 nike

我有一个用 Codegear 开发的 VCL gui。我为主窗体创建了一个 DropTarget,DropTarget 对象实现了 IDropTarget 接口(interface),它允许我从资源管理器中拖放文件。现在因为我只希望一些子组件成为放置目标(而不是整个表单),所以当 POINTL 坐标在组件的边界内时,我只让 DragEnter 方法返回 S_OK。

但是,如果我将项目缓慢拖入窗体的边界而不是组件,DragEnter 返回 E_NOINTERFACE,因此不允许放置。如果我继续拖入拖放区,DragEnter 将不会触发,我明白它为什么不触发。所以我的问题是如何手动触发 DragEnter 事件

最佳答案

您似乎忽略了 IDropTarget 有一个 DragOver() 方法,除了 DragEnter() 之外您还需要使用该方法。如果 DragEnter() 没有以您允许的坐标开始,那么您必须返回 S_OK 并将 pdwEffect 参数设置为 DROPEFFECT_NONE,然后让 DragOver() 继续执行它的操作之后自己进行坐标检查。

此外,由于您只想拖动到特定控件上,因此您应该为每个单独的控件(假设它们是 TWinControl 后代)调用 RegisterDragDrop(),而不是为 TForm 本身调用。

关于c++ - 与 VCL 窗体一起使用时 IDropTarget 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1204935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com