【问题标题】:X11 Mouse Movement EventX11 鼠标移动事件
【发布时间】:2012-02-20 07:06:58
【问题描述】:

在 XLib 中创建窗口时

  1. 我提供给SetWindowAttributes.event_mask 成员的掩码是什么?
  2. 我必须将什么传递给XCreateWindow() 的第 11 个参数
  3. 我在主消息循环中寻找哪些事件(我在哪里使用 XNextEvent(lDisplay, &xEvent);
  4. 由于 X 的行为与 Microsoft 的 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;
                    }
    

【问题讨论】:

标签: c linux x11 xlib mousemove


【解决方案1】:

XLib 有很好的文档记录。比如XLib Programming Manual: Event Masks

【讨论】:

  • 只是让您知道 - 该链接现在已损坏。
  • 不是了,不是了。
【解决方案2】:

我认为前三个有据可查。

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

【讨论】:

  • 我完全忘记了xev,确实很有用。
猜你喜欢
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2011-11-19
相关资源
最近更新 更多