c++ X11全局改变光标形状

Posted

技术标签:

【中文标题】c++ X11全局改变光标形状【英文标题】:c++ X11 global change cursor shape 【发布时间】:2014-03-24 19:04:06 【问题描述】:

我正在为 Linux 编写一个基于外部硬件(Leap Motion 控制器)输入的鼠标仿真程序。为了正确操作,我想更改光标的形状以向用户传达与光标操作相关的状态信息。我目前正在编写一个用户空间程序来处理这个问题。鼠标移动和鼠标点击是使用 XTest 库处理的,但现在我找不到改变光标形状的方法。

使用 XDefineCursor() 我已经能够在我的程序拥有的窗口上将光标更改为自定义形状,但我需要在完整的图形环境中使用它,因为该程序将保留 大部分时间隐藏在后台。

如果可能的话,我也宁愿不编写设备驱动程序并暂时留在用户空间。此外,我宁愿不必更改显示管理器的代码(即 Unity 或 LXDE)。

编辑: 硬件是 Leap Motion 控制器。如果他们仍在传感器的范围内或超出范围,我需要向用户显示。

【问题讨论】:

你有什么样的外部硬件?更具体! 【参考方案1】:

您可以使用XFixes protocol 观察光标变化,然后在每次更改光标时修改光标,将您的图形添加到尝试设置它的任何窗口(SelectCursorInput/GetCursorImage/CursorNotify 事件)

【讨论】:

它看起来很有前途,我似乎找不到很多关于它的文档。 我可以给你一个简单的例子,使用 c 或 javascript 和 github.com/sidorares/node-x11 @AndreySidorov:我正在寻找类似于 OP 的东西,并在讨论是否去挖掘 KDE 以弄清楚它是如何处理弹性光标的事情(当应用程序启动时),或者解决您建议的方法(KDE 是否也在做同样的事情?)。我不禁想知道追逐光标更改是否会引入竞争条件并引发故障(WM/app 光标更改 -> X11 赢得更新竞争并刷新显示 -> 光标猴子补丁 -> X11 更新 => 显示未修补的光标一帧或两帧)。我还记得 KDE 弹跳使光标在旧 PC 上严重闪烁 - 我可以解决这个问题吗?

以上是关于c++ X11全局改变光标形状的主要内容,如果未能解决你的问题,请参考以下文章

如何改变vim中的光标形状 : 在插入状态下显示为 beam?而在 其他 状态下 为 block?

MFC编程的时候,改变鼠标光标样式

在Delphi中怎样抓取鼠标形状

MFC如何让鼠标移动到按钮上马上改变鼠标形状为手型

怎么让鼠标变成"手"的形状

无法使用 Qt.OpenHandCursor 属性设置光标形状