xlib - 打印事件名称
xlib - print event name
所以我有一个使用 xlib 创建的标准 window 来处理事件:
while (keep_running){
XNextEvent (display, &event);
printf("event\n");
}
现在好像没有调用 expose 事件,所以我无法在 window 中绘制。我可以通过 print 语句看到正在触发一些事件,我想知道它们是什么事件。
所以基本上我的问题是,我怎样才能得到事件名称来打印它?
我还在学习 C,所以任何帮助都适用!
所以我不完全同意他们的设计决定,但它可能是 30 年前做出的,所以现在不是星期一早上四分卫的时间...
类型是疯狂联合:
typedef union _XEvent {
int type; /* must not be changed */
XAnyEvent xany;
XKeyEvent xkey;
XButtonEvent xbutton;
XMotionEvent xmotion;
XCrossingEvent xcrossing;
XFocusChangeEvent xfocus;
XExposeEvent xexpose;
XGraphicsExposeEvent xgraphicsexpose;
XNoExposeEvent xnoexpose;
XVisibilityEvent xvisibility;
XCreateWindowEvent xcreatewindow;
XDestroyWindowEvent xdestroywindow;
XUnmapEvent xunmap;
XMapEvent xmap;
XMapRequestEvent xmaprequest;
XReparentEvent xreparent;
XConfigureEvent xconfigure;
XGravityEvent xgravity;
XResizeRequestEvent xresizerequest;
XConfigureRequestEvent xconfigurerequest;
XCirculateEvent xcirculate;
XCirculateRequestEvent xcirculaterequest;
XPropertyEvent xproperty;
XSelectionClearEvent xselectionclear;
XSelectionRequestEvent xselectionrequest;
XSelectionEvent xselection;
XColormapEvent xcolormap;
XClientMessageEvent xclient;
XMappingEvent xmapping;
XErrorEvent xerror;
XKeymapEvent xkeymap;
long pad[24];
} Event;
所以你必须先通过类型来判断正在使用的是哪个事件:
if(event.type == KeyPress)
{
printf("keypress\n");
// now you know the type you can use the specific fields from `XKeyEvent xkey`...
}
或者您可以只记录类型
printf("event type = (%d)\n",event.type);
联合起作用是因为每个其他可能的元素也将类型作为第一个元素,所以它们都在同一地址上排列...
所以我有一个使用 xlib 创建的标准 window 来处理事件:
while (keep_running){
XNextEvent (display, &event);
printf("event\n");
}
现在好像没有调用 expose 事件,所以我无法在 window 中绘制。我可以通过 print 语句看到正在触发一些事件,我想知道它们是什么事件。
所以基本上我的问题是,我怎样才能得到事件名称来打印它?
我还在学习 C,所以任何帮助都适用!
所以我不完全同意他们的设计决定,但它可能是 30 年前做出的,所以现在不是星期一早上四分卫的时间...
类型是疯狂联合:
typedef union _XEvent {
int type; /* must not be changed */
XAnyEvent xany;
XKeyEvent xkey;
XButtonEvent xbutton;
XMotionEvent xmotion;
XCrossingEvent xcrossing;
XFocusChangeEvent xfocus;
XExposeEvent xexpose;
XGraphicsExposeEvent xgraphicsexpose;
XNoExposeEvent xnoexpose;
XVisibilityEvent xvisibility;
XCreateWindowEvent xcreatewindow;
XDestroyWindowEvent xdestroywindow;
XUnmapEvent xunmap;
XMapEvent xmap;
XMapRequestEvent xmaprequest;
XReparentEvent xreparent;
XConfigureEvent xconfigure;
XGravityEvent xgravity;
XResizeRequestEvent xresizerequest;
XConfigureRequestEvent xconfigurerequest;
XCirculateEvent xcirculate;
XCirculateRequestEvent xcirculaterequest;
XPropertyEvent xproperty;
XSelectionClearEvent xselectionclear;
XSelectionRequestEvent xselectionrequest;
XSelectionEvent xselection;
XColormapEvent xcolormap;
XClientMessageEvent xclient;
XMappingEvent xmapping;
XErrorEvent xerror;
XKeymapEvent xkeymap;
long pad[24];
} Event;
所以你必须先通过类型来判断正在使用的是哪个事件:
if(event.type == KeyPress)
{
printf("keypress\n");
// now you know the type you can use the specific fields from `XKeyEvent xkey`...
}
或者您可以只记录类型
printf("event type = (%d)\n",event.type);
联合起作用是因为每个其他可能的元素也将类型作为第一个元素,所以它们都在同一地址上排列...