Linux:捕获鼠标ala VirtualBox

一个人如何“捕捉鼠标”(就像vbox捕捉鼠标[1]一样)

在Linux中使用C ++还是C?

[1]在VBox(本质上),当你点击一个vbox窗口时,它捕捉鼠标,这意味着鼠标被限制在窗口上。 当按下一个键(或其他事件)时,鼠标可以自由地返回到其他事件。


编辑:当我写这个,你可能会或可能不会使用的时候,我在考虑使用Qt。 不管你使用的是什么GUI框架,这样的东西都可以工作。

它看起来没有可以设置的单个QWidget属性,这会影响到这一点。 所以你必须做的是1)启用鼠标跟踪,2)处理鼠标输入和/或焦点事件(在QWidget中),3)处理后续的离开事件,以及它们何时发生4)将鼠标位置重置为使用QCursor :: setPos()的小部件内的最近点,它是静态的。 2)和3)将由QWidget :: enterEvent(),QWidget :: focusInEvent()和QWidget :: leaveEvent()处理。

我不知道如果鼠标位于窗口小部件上是否发布了事件事件,但窗口小部件没有关注; 如果没有,那么你可以跳过2)。


由于我没有具体的答案,我想推荐你,我会做什么。

当开源应用程序中有一个功能时,我建议使用它的源代码。

如果挖掘或阅读不够,您可能希望编译具有完整调试信息的应用程序,并在调试器下运行以查找负责有趣功能的代码。

如果你不在那里,请查看以下地点:

VirtualBox - 源代码组织

VirtaulBox GUI前端来源

在这样的chegesets中进行一些搜索,使用“鼠标捕获”搜索变更集

在变更集30448中,我看到了函数调用“captureMouse”,我认为这个或者类似的地方可能会跟随你到正确的一段代码。

我发现,最令你感兴趣的是:

src / VBox / Frontends / VirtualBox / src / runtime / UIMouseHandler.cpp描述:“FE / Qt4-OSX:防止鼠标以捕捉模式离开窗口。” ,结账这些功能:

void UIMouseHandler::captureMouse(ulong uScreenId)

为了完整,这里是头文件:UIMouseHandler.h

链接地址: http://www.djcxy.com/p/81001.html

上一篇: Linux: Capturing the mouse ala VirtualBox

下一篇: Capture screenshot from Webcam using DirectX.Capture class [VB/C#]