c/c++语言开发共享用Xlib捕获鼠标

我想编写一个简单的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

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐