我想编写一个简单的Xlib程序来改变鼠标的行为(举一个例子,反转垂直运动)。 我有捕获事件的问题。
我想要代码
下面的代码应该在每次移动鼠标时捕获一个运动事件,但只有当指针从一个窗口移动到另一个窗口时它才会生成事件…如何捕获所有运动事件?
#include "X11/Xlib.h" #include "stdio.h" int main(int argc, char *argv[]) { Display *display; Window root_window; XEvent event; display = XOpenDisplay(0); root_window = XRootWindow(display, 0); XSelectInput(display, root_window, PointerMotionMask ); while(1) { XNextEvent( display, &event ); switch( event.type ) { case MotionNotify: printf("x %dy %dn", event.xmotion.x, event.xmotion.y ); break; } } return 0; }
有关:
X11:我如何真正抓住鼠标指针?
当您的程序收到鼠标事件时,它会收到事件的副本; 副本也会发送到正在侦听这些事件的其他程序(请参阅XSelectInput(3)
)。 如果不使用XGrabPointer(3)
来获取鼠标的独占所有权,则无法覆盖此项,这将阻止其他程序接收任何鼠标事件。 简而言之,你实际上无法做你想做的事情。
另请注意,如果客户端在其窗口之一的do-not-propagate掩码中指定了PointerMotion
,则不会在其窗口内收到任何指针运动事件(除非您执行抓取操作)。
如果要在移动鼠标时更改鼠标的行为,我建议您使用输入属性而不是尝试在程序中进行处理。
您不需要自己调用xinput
程序:您可以使用Xlib调用(查看xinput
的源代码)。
需要了解更多c/c++开发分享用Xlib捕获鼠标,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享用Xlib捕获鼠标相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979381.html