xevent.xkey.keycode 不适合我 (X11)
xevent.xkey.keycode not working for me (X11)
所以我有这段代码运行良好
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 ;
}
我在终端运行ning xev 得到了键码 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);
}
}
因此无论按下什么鼠标按钮,无论按下什么键盘键,它都会执行程序,但同样,只有鼠标按钮执行程序,而键盘键不执行程序。
问题出在上面选择输入类型的函数中,它是这样的
XSelectInput(dpy, win, ExposureMask|ButtonPressMask);
我改成了这个
XSelectInput(dpy, win, ExposureMask|ButtonPressMask|KeyPressMask);
这修复了它。
所以我有这段代码运行良好
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 ;
}
我在终端运行ning xev 得到了键码 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);
}
}
因此无论按下什么鼠标按钮,无论按下什么键盘键,它都会执行程序,但同样,只有鼠标按钮执行程序,而键盘键不执行程序。
问题出在上面选择输入类型的函数中,它是这样的
XSelectInput(dpy, win, ExposureMask|ButtonPressMask);
我改成了这个
XSelectInput(dpy, win, ExposureMask|ButtonPressMask|KeyPressMask);
这修复了它。