2012-02-20 261 views
4

当创建在XLIBX11鼠标移动事件

  1. 一个窗口什么是我提供给SetWindowAttributes.event_mask成员的面具?
  2. 我有什么要传递给的XCreateWindow()
  3. 11日paramater什么事件,我在主消息循环寻找(这里我用XNextEvent(lDisplay, &xEvent);
  4. 因为X的表现比微软的Win32 API的不同,如何我确定鼠标是否在我的窗口或我的“应用程序”窗口,而不是在桌面上?

我已经找了一个类似的帖子,如果已经有一个,请指出我在正确的方向


更新

对于那些谁想要简单的答案,部分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; 
           } 
    
+1

XLib有很好的文档记录。你有没有尝试搜索互联网?例如[XLib编程手册:事件掩膜](http://tronche.com/gui/x/xlib/events/mask.html) – 2012-02-20 07:14:41

回答

1

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

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

+0

我完全忘记了'xev',确实非常有用。 – erb 2014-12-31 15:31:42