我在 C++/CLI 中编写了一个自定义控件(Forms.Control 的直接子级),它将把它的大部分处理和所有的绘制卸载到一个单独的传统 MFC 控件。我将此控件包装在 C# 应用程序中。我需要能够将项目从应用程序中同一窗体上的 UserControl 拖到 C++/CLI 控件上。
出于某种原因,尽管我将 AllowDrop 设置为 true,但我的自定义控件没有收到任何拖放事件。(我已经验证 AllowDrop 在运行时是真的。)我从来没有机会检查/操作 DragEventArgs,因为从不调用回调。
我已经验证了拖放功能正常。例如,如果我用面板替换自定义控件,我会得到拖放回调就好了。
是否必须在控件中实现一些额外的东西来支持拖放回调?系统是否必须处理一些微妙的事情才能识别控件正在悬停并且应该是拖放操作的目标?
笔记:
用于绘制的 MFC 控件对我来说尚不可用,所以我只是绘制一个简单的渐变背景(通过OnPaintBackground
),我正在尝试绘制。我还在OnPaint
.
我尝试在创建自定义控件的句柄之前(通过设计器/构造函数代码)和创建句柄之后(通过 OnHandleCreated 覆盖)设置 AllowDrop = true。行为上没有区别。
拖动光标永远不会从自定义控件上的默认“无可用拖动”光标更改。
我正在this.DoDragDrop()
从事件处理程序调用MouseDown
UserControl 的子控件上的事件。
DragDrop 似乎可以与我在 C# 中创建的另一个自定义控件在与用户控件相同的程序集中工作。它很好地捕获了回调。只有我的 C++/CLI 控件没有看到它们。初始化组件 goo 是无关紧要的。我可以毫无改变地评论它。