« 感觉好多了 | 返回首页 | 记录几个近期碰到的 bug »

X 下的鼠标滚轮消息的处理

今天午休的时候,抽了几分钟解决我们的游戏 client engine 在 X Window 下无法处理鼠标滚轮事件的问题。

可能这年头直接写代码处理 XEvent 的程序员不多,我 google 了一下,没有找到详细的文档。不过我想这不会是大问题,没有资料就直接看 .h 文件好了。

打开 Xlib.h 通读了一遍,发现没有什么 event 结构是跟滚轮有关的。又绕回自己的程序试了一下,原来,X 下没有特别为鼠标滚轮做单独的消息。(Windows 下则有对应的 WM_MOUSEWHEEL

取而代之的是,鼠标的前滚和后滚被映射到了鼠标的第 4 和第 5 个按键的事件上了。(这个其实可以在 X 的配置文件里配置,相关资料很容易 google 到。)那么,支持鼠标滚轮事件的处理,只需要在 ButtonPress 做处理即可。

Comments

研究了下,但是貌似x的滚轮的处理是处理Z轴的事件而不是分配到其他button,会再好好看看的
老大,效率好高啊,google还要打开Xlib.h通读一遍,还找到原因所在,总共才花了几分钟。想知道是怎么做到的?
最喜欢的一款游戏用的FREEBSD做服务器,我也就喜欢上了"她".
楼下的,这些我不熟。如果是我自己的系统出了问题,我会想办法去读代码查看。开源不就有这个好处吗? 如果没出问题,我不是做 web 开发这行当的,暂时没有精力特意去研究。
居然在搜wiki问题的时候搜到了你的blog,hoho,麻烦帮忙解答一下问题哈:)
(._.!) 不要用终于吧。 我们项目组 05 年开始就一直做平台无关的开发。最近一年多以来,3d client 的开发就是在 ubuntu 下开展工作的。 而 server 开发是在 freebsd 开展的。选择 linux 还是 freebsd 或是 windows ,都是开发人员的喜好而已,代码的要求是平台无关。 不过产品主要面向的用户是 windows ,一定要确保 windows 下运行没有问题。 虽然我们的程序都可以在各种 os 下编译出原生的程序。不过即使用 wine 又有什么不好的呢?wine 只是一个壳而已。
终于开始研究X了啊,请问网易是不是要转到做跨平台的游戏了啊? 我的要求其实很简单,只要它能不用wine模拟能直接运行在linux上让我玩游戏就够了, Ubuntu实在太好用,我不想再回到M$的肮脏世界!
恩,没有做过X
逮到一个沙发 呵呵

Post a comment

非这个主题相关的留言请到:留言本