关于xlib按键事件(KeyPress, KeyRelease)自动重复的解决方法
来源:互联网 发布:linux locale命令i18n 编辑:程序博客网 时间:2024/06/07 10:46
最近在拿cpp重构之前写的为游戏引擎准备的api。
为了跨lin和win这两个平台,需要使用跨平台的窗口管理库或抽象出自己的独立于系统的接口。
因为暂时不想去接触那些重量级的库,我选择了后者。linux下的窗口管理用的是xlib。
没有太过系统地去看过xlib的文档,初始代码用的是lin下codeblock建立opengl工程的自带代码。
编写途中遇到一个问题,就是KeyPress、KeyRelease这两个事件会在按键按下并开启了XAutoRepeat的情况下多次触发。
为了能检测按键物理状态和检测类似双击按键的操作,就不得不解决这个问题。
方案1:
使用XAutoRepeatOff()关闭X-Window的按键自动重复,但这会影响到整个系统,如果不调用XAutoRepeatOn(),这个影响在程序关闭之后还会存在==|||。可以在窗口获取焦点的时候调用XAutoRepeatOff(),并在失去焦点的时候调用XAutoRepeatOn(),但这种方法实在显得很笨拙且易导致问题。
方案2:
来源:http://stackoverflow.com/questions/2100654/ignore-auto-repeat-in-x11-applications
搜了好久才搜到的这个方案,还是google比较好用==。
具体思路是在KeyRelease事件触发时判断是否与之前的KeyRelease事件为同一keycode和同一time。
是则说明为重复触发并将紧接着的重复的KeyPress事件提取出来。
这个方法效果非常好,几经测试没有出任何问题。代码见来源网址。
为了跨lin和win这两个平台,需要使用跨平台的窗口管理库或抽象出自己的独立于系统的接口。
因为暂时不想去接触那些重量级的库,我选择了后者。linux下的窗口管理用的是xlib。
没有太过系统地去看过xlib的文档,初始代码用的是lin下codeblock建立opengl工程的自带代码。
编写途中遇到一个问题,就是KeyPress、KeyRelease这两个事件会在按键按下并开启了XAutoRepeat的情况下多次触发。
为了能检测按键物理状态和检测类似双击按键的操作,就不得不解决这个问题。
方案1:
使用XAutoRepeatOff()关闭X-Window的按键自动重复,但这会影响到整个系统,如果不调用XAutoRepeatOn(),这个影响在程序关闭之后还会存在==|||。可以在窗口获取焦点的时候调用XAutoRepeatOff(),并在失去焦点的时候调用XAutoRepeatOn(),但这种方法实在显得很笨拙且易导致问题。
方案2:
来源:http://stackoverflow.com/questions/2100654/ignore-auto-repeat-in-x11-applications
搜了好久才搜到的这个方案,还是google比较好用==。
具体思路是在KeyRelease事件触发时判断是否与之前的KeyRelease事件为同一keycode和同一time。
是则说明为重复触发并将紧接着的重复的KeyPress事件提取出来。
这个方法效果非常好,几经测试没有出任何问题。代码见来源网址。
0 0
- 关于xlib按键事件(KeyPress, KeyRelease)自动重复的解决方法
- jQuery按键响应事件keypress对应的按键编码keycode
- [经验总结]jQuery按键响应事件keypress对应的按键编码keycode
- KeyPress事件的用法
- keypress事件的问题
- keypress事件的问题
- 转载关于KeyPress和KeyDown事件的区别和联系
- 关于KeyPress事件只能输入数字小数的问题
- 关于KeyPress和KeyDown事件的区别和联系
- 关于KeyPress和KeyDown事件的区别和联系
- 关于KeyPress和KeyDown事件的区别和联系
- 转载关于KeyPress和KeyDown事件的区别和联系
- keyPress事件中的keyCode和action 两个参数(附测试按键的一个小demo)
- 控件按键事件keypress, keydown,keyup(更新中)
- 关于vs2003中propertygrid的keypress事件无效的解决过程
- keyDown keyPress keyUp 事件的区别
- keyDown keyPress keyUp 事件的区别
- JavaScript 的keydown,keypress,keyup事件
- Yii查询多条固定数据
- HDU4787--GRE Words Revenge(在线AC自动机)
- 第三方支付风控系统的演进过程
- LR的web_reg_save_param详解
- RelativeLayout—相对布局
- 关于xlib按键事件(KeyPress, KeyRelease)自动重复的解决方法
- restful 关于Restful Web Service的一些理解
- java 解析xml的四种方式
- MySQL索引原理及慢查询优化
- Flex4中想要去除AdvancedDataGrid表头部分的竖型分割线
- 森纵sap怎么样,是骗人的
- 原型prototype
- cocs2dx richtext
- 如何在spring框架中解决多数据源的问题