c++ - 如何使用 Win32 API 右键拖动?

标签 c++ winapi

我实现了 IDropTarget 接口(interface)并且拖放(来自资源管理器的文件)运行良好。

当我用鼠标右键拖放文件时,上下文菜单没有弹出。

所以我认为显示上下文菜单是我的责任,

但在 IDropTarget::Drop 方法中,(grfKeyState & MK_RBUTTON) 始终为 0。

我如何知道拖动鼠标按钮是否正确?

有没有一种特殊的方法来显示菜单并在下拉后接收选择?

(我更喜欢 Win32 API 方式,我不使用 MFC。)

最佳答案

我猜 (grfKeyState & MK_RBUTTON) 总是 0 因为当调用 Drop() 方法时,鼠标按钮已经被释放(你刚刚做了drop) - 键盘/鼠标状态标志自然会表明它确实已发布。

您可以(根据文档,应该)做的是,在您处理 DropEnter()< 时,提前决定您对 Drop() 采取的操作过程。我自己还没有尝试过,但我很确定应该在那里设置 MK_RBUTTON 标志。您可以在调用放置目标的 DropEnter() 方法时检查该标志,保存它,然后在调用 Drop() 时自己打开上下文菜单。这不是最干净的解决方案,但我不知道是否有办法让 Windows 为您显示上下文菜单。

关于c++ - 如何使用 Win32 API 右键拖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155925/

相关文章:

c++ - 转换大约 150mb 字符串的快速方法

c++ - 将位图加载到 CStatic 控件中?

c++ - 如何在 Windows 中获取硬盘当前负载信息?

c - 如何修改 ListView 子项中单个字符的字体颜色?

windows - 获取文件系统限制

c++ - 如何使用时间复杂度优于 O(n^2) 的 STL vector 和 STL 算法进行左连接?

c++ - 左值引用类型是什么意思

c++ - C++ 11 中 std::is_base_of 的逻辑

c++ - 了解 VerQueryValue

c++ - 不能通过回调永久改变类的状态