X11鼠标移动事件

时间:2012-02-20 07:06:58

标签: c linux x11 xlib mousemove

在XLib中创建窗口时

  1. 我向SetWindowAttributes.event_mask会员提供的面具是什么?
  2. 我必须传递给XCreateWindow()
  3. 的第11个参数
  4. 我在主消息循环中寻找的事件是什么(我在哪里使用XNextEvent(lDisplay, &xEvent);
  5. 由于X的行为与Microsoft的Win32 API不同,如何确定鼠标是在我的“应用程序”中的窗口还是窗口上而不是在桌面上?
  6. 我找了一篇类似的帖子。如果那里已经有一个,请指出我正确的方向。


    更新

    对于那些想要轻松回答第1-3部分的人:

    1

    xAttributes.event_mask =  ExposureMask | KeyPressMask | ButtonPress |
                              StructureNotifyMask | ButtonReleaseMask |
                              KeyReleaseMask | EnterWindowMask | LeaveWindowMask |
                              PointerMotionMask | Button1MotionMask | VisibilityChangeMask |
                              ColormapChangeMask;
    

    2

    unsigned long valuemask = CWEventMask | CWBackPixel | CWBorderPixel | CWCursor;


    1.                 switch (xEvent.type)
                      {
                      case MapNotify:
                          break;
                      case Expose:
                          // If this is not the last expose event break
                          if (xEvent.xexpose.count != 0)
                              break;
                          else
                              break;
                      case ConfigureNotify:
                          break;
                      case VisibilityNotify:
                          break;
                      case DestroyNotify:
                          break;
                      case ButtonPress:
                      case ButtonRelease:
                      case EnterNotify:
                      case MotionNotify:
                      case LeaveNotify:
                          if(_mouseHandler)
                              _mouseHandler->HandleInput(lDisplay, &xEvent);
                          break;
                      case KeyPress:
                      case KeyRelease:
                          if(_keyboardHandler)
                              _keyboardHandler->HandleInput(lDisplay, &xEvent);
                          break;
                      default:
                          if(_keyboardHandler)
                              _keyboardHandler->HandleInput(lDisplay, &xEvent);
                          break;
                      }
      

2 个答案:

答案 0 :(得分:4)

XLib有很好的记录。例如XLib Programming Manual: Event Masks

答案 1 :(得分:2)

我认为前三个是有据可查的。

要确定鼠标是否在窗口上,请收听Enter and Leave事件。 xev实用程序是了解X窗口系统中存在哪些事件以及何时发送它们的好方法。