【问题标题】:Xlib mouse events and ButtonPressMaskXlib 鼠标事件和 ButtonPressMask
【发布时间】:2009-11-27 06:21:02
【问题描述】:

我编写了一个简单的程序,它将报告特定窗口的按键按下和释放事件。就我而言,它主要是终端,因为我从终端调用程序。我能够在终端窗口中获​​取按键和释放事件(我在终端上使用了 XSelectInput() 和 KeyPressMask 和 KeyReleaseMask),但同样不适用于 ButtonPress 和 ButtonRelease。不仅是这些,而且与鼠标相关的任何事件都不会被报告。知道为什么会这样吗?

#include
#include
#include
#include
#include
#include

int main() {
Display *display = XOpenDisplay(NULL);
KeySym k;
int revert_to;
Window window;
XEvent event;

XGetInputFocus(display, &window, &revert_to);
XSelectInput(display, window, KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask);

while(1)
{
XNextEvent(display,&event);
  switch (event.type) {

  case KeyPress : printf("Key Pressed\n"); break;
  case KeyRelease : printf("Key Released\n"); break;
  case ButtonPress : printf("Button Pressed\n"); break;
  case ButtonRelease : printf("Button Released\n"); break;
  case EnterNotify : printf("Enter\n"); break;
  }
}
XCloseDisplay(display);
return 0;
}

【问题讨论】:

  • 还忘了提到如果我用 xlib 创建自己的窗口,鼠标事件会被报告。那么这是否意味着 XSelectInput 不能与我未映射的窗口一起使用?
  • 我可以问一下您要构建的最终目的吗?

标签: events mouse pointers xlib


【解决方案1】:

您遇到的问题是 Xlib 仅向一个客户端发送 ButtonPress/Release 事件。我认为您正在使用的窗口已经有一个正在监听其鼠标事件的客户端。因此,您的 SelectInput 调用实际上并没有设置 ButtonPress/Release 掩码,而是生成了一个您没有检查的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2011-05-25
    • 2011-12-30
    • 2019-02-02
    相关资源
    最近更新 更多