c – X11鼠标移动事件
作者:互联网
在XLib中创建窗口时
>我为SetWindowAttributes.event_mask成员提供了哪些掩码?
>我需要传递给XCreateWindow的第11个参数()
>我在主消息循环中寻找的事件是什么(我在哪里使用XNextEvent(lDisplay,& xEvent);?
>由于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;
>
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;
}
解决方法:
XLib有很好的记录.例如XLib Programming Manual: Event Masks
标签:c-3,linux,x11,xlib,mousemove 来源: https://codeday.me/bug/20190518/1126047.html