我想编写一个简单的 Xlib 程序来改变鼠标行为(举个例子,反转垂直移动)。我在捕获事件时遇到问题。
我想要代码
- 捕获控制器位置的变化(我向上移动鼠标,
MotionEvent
)
- 计算新的光标位置(
new_x -= difference_x
)
- 设置新的光标位置(向下移动指针,
XWarpPointer
,防止此处生成事件)
下面的代码应该在每次移动鼠标时捕获一个运动事件,但只有当指针从一个窗口移动到另一个窗口时才会生成该事件...如何捕获所有移动事件?
#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 %d y %d\n", event.xmotion.x, event.xmotion.y );
break;
}
}
return 0;
}
Related:
X11:如何真正抓住鼠标指针? https://stackoverflow.com/questions/2792954/x11-how-do-i-really-grab-the-mouse-pointer
当您的程序收到鼠标事件时,它会收到事件的副本;副本也会发送到正在侦听这些事件的其他程序(请参阅XSelectInput(3) http://www.x.org/releases/current/doc/man/man3/XSelectInput.3.xhtml)。如果不使用则无法覆盖它XGrabPointer(3) http://www.x.org/releases/current/doc/man/man3/XGrabPointer.3.xhtml独占鼠标的所有权,这将阻止其他程序接收any鼠标事件。简而言之,你实际上无法做你想做的事。
另请注意,如果客户已指定PointerMotion
在其窗口之一的“不传播”掩码中,您将不会在其窗口内收到任何指针运动事件(同样,除非您进行抓取)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)