Linux 如何使用XNextEvent、XpeekeEvent和XPutBackEvent

Linux 如何使用XNextEvent、XpeekeEvent和XPutBackEvent,linux,x11,Linux,X11,我正在尝试开发一个小Linux应用程序,直接在屏幕上执行测量,即测量图像、文档等中的距离和角度 为此,我受到了 我想我可以使用XNextEvent或XpeekeEvent,可能还有XPutBackEvent。 这个程序很好地响应鼠标事件,但是由于它使用了XNextEvent,所以bucket停止在那里,事件不会发送到目标窗口,鼠标变得无用,如果我使用XPutBackEvent,同样的事件会再次返回。 为了解决这个问题,我用XPeekEvent替换了XNextEvent,它应该将事件发送到更高的级

我正在尝试开发一个小Linux应用程序,直接在屏幕上执行测量,即测量图像、文档等中的距离和角度

为此,我受到了 我想我可以使用XNextEvent或XpeekeEvent,可能还有XPutBackEvent。 这个程序很好地响应鼠标事件,但是由于它使用了XNextEvent,所以bucket停止在那里,事件不会发送到目标窗口,鼠标变得无用,如果我使用XPutBackEvent,同样的事件会再次返回。 为了解决这个问题,我用XPeekEvent替换了XNextEvent,它应该将事件发送到更高的级别。这并没有起到任何作用,但使情况变得更糟,发送了无穷无尽的相同事件流,即过滤 平起平坐的事件也无济于事

提前感谢您提供解决此问题的任何提示


问题基本上是这些事件不会消失,我不知道如何消除它们,以便能够使用鼠标。下面的代码是从 而且有些修改

#包括
#包括
#包括
#包括
#包括
字符*键名称[]={
“第一”,
“第二(或中间)”,
“第三”,
“第四”/:D
“fivth”//:|
};
int main(int argc,字符**argv)
{
显示*显示;
XEvent-XEvent,oldevent;
窗口窗口;
长的无符号int buttontime=0;
if((display=XOpenDisplay(NULL))==NULL)
返回-1;
窗口=默认根窗口(显示);
XAllowEvents(显示、异步和当前时间);
指针(显示器,
窗口,
1.
//PointerMotionMask|
按钮评估任务|按钮释放任务,
GrabModeAsync,
GrabModeAsync,
没有一个
没有一个
当前时间);
而(1)
{
XNextEvent(显示器和xevent);
//XPeekEvent(显示和xevent);
开关(xevent.type){
/*案件通知:
printf(“鼠标移动:[%d,%d]\n”,xevent.xmotion.x_根,xevent.xmotion.y_根);
中断*/
外壳按钮按下:
//如果((按钮时间)