【发布时间】:2022-01-09 07:42:21
【问题描述】:
所以我有这段运行良好的代码
while(1) {
XNextEvent(dpy,&e);
paint(cs,g);
if(e.xbutton.button == 1) {
evolue(g,gc,cycleG);
paint(cs,g);
printf("test");
}else if(e.xbutton.button==3) break ;
}
这里 xbutton.button == 1 是左键。
我想更改代码,以便通过将其更改为通过键盘按下来执行该功能
while(1) {
XNextEvent(dpy,&e);
paint(cs,g);
if(e.xkey.keycode == 54) {
evolue(g,gc,cycleG);
paint(cs,g);
printf("test");
}else if(e.xbutton.button==3) break ;
}
我通过在终端上运行 xev 得到了 keycode 54
所以无论如何,从逻辑上讲,第二段代码应该可以工作,但它只是不会在 if 语句中运行代码,这与使用鼠标输入时不同。所以..什么给了?以及如何通过键盘输入修复它?
编辑: 为了进一步测试,我写了这段代码
while(1) {
XNextEvent(dpy,&e);
if(e.type == KeyPress){
paint(cs,g);
evolue(g,gc,cycleG);
}
if(e.type == ButtonPress){
paint(cs,g);
evolue(g,gc,cycleG);
}
}
这样无论按下哪个鼠标按钮和按下哪个键盘键,它都会执行程序,但同样,只有鼠标按钮执行程序,而键盘键不执行。
【问题讨论】:
-
除此之外,您永远不会检查由
XNextEvent处理的typeof event。 -
@G.M.但 Xevent 不是适用于所有事件类型吗?
-
XEvent是结构体的联合体,每个结构体都以字段int type开头。type字段用于区分联合。参见例如this example. -
@G.M.我修改了我的帖子以显示我所做的进一步测试,以便它检查它是什么 Xevent 类型并且它仍然无法正常工作