LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2718|回复: 10

gtk+ 窗口接收键盘事件问题

[复制链接]
发表于 2008-3-24 20:51:49 | 显示全部楼层 |阅读模式
大家好,在GTK+开发中本人的以下想法不知道是否正确,哪位要是能帮忙给给意见不胜感激:
在gtk+中,能否同过一个隐藏窗口截获系统的全部key event?我不打算采用信号与callback函数的方式来实现。


先谢谢了
发表于 2008-3-24 21:10:49 | 显示全部楼层
按我现在的认知,应该是不行,因为GTK无法创建root window,所以需要配合win32 api或者xlib或者其他GUI的event queue才能完成。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 10:12:40 | 显示全部楼层
不好意思,版主所说的‘root window’是指什么?
先把背景说一下吧,嵌入式linux系统开发,采用GTK+/DirectFB的模式。
使用GTK+来进行界面描画和截获按键事件

不知道版主有没有什么好的建议?
回复 支持 反对

使用道具 举报

发表于 2008-3-25 10:29:04 | 显示全部楼层
这种底层的东西,还是最好采用各种GUI库的native 函数来完成。
X服务器就用Xlib。
Dfb就用Dfb。
Windows就用win32 API。

如果一定要尝试的话,用gtk_grab_add()函数,然后用这个grab作为中心自己再去分发到相应的widget去。但估计这种方式并不一定能抓得全所有键盘事件。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 11:56:47 | 显示全部楼层
>这种底层的东西,还是最好采用各种GUI库的native 函数来完成。
>X服务器就用Xlib。
>Dfb就用Dfb。
>Windows就用win32 API。
版主的意思直接调用DirectFB的接口来截获全部系统事件?
回复 支持 反对

使用道具 举报

发表于 2008-3-26 08:43:52 | 显示全部楼层
谢谢个位,我想问一个相关的问题。 GTK中有没有一个信号可以告诉我所有的控件都已经画好了,such as window_ready or idle 之类的callback. 我打算测在几个窗口之间切换的时间。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-28 15:42:18 | 显示全部楼层
关于key event的接收问题,本人用了一个比较变态的办法,先描画一个透明的窗体然后再描画构建其他窗体并调用show后直接调用gtk_window_present(),就可以通过透明窗体来接受事件了。
回复 支持 反对

使用道具 举报

发表于 2010-1-28 22:53:37 | 显示全部楼层
Post by realtang;1830438
按我现在的认知,应该是不行,因为GTK无法创建root window,所以需要配合win32 api或者xlib或者其他GUI的event queue才能完成。
版主你好,能详细讲述一下gtk+如何与xlib结合获得全部key_event的?
我做的时候只能用callback实现与固定widget绑定,很苦恼
回复 支持 反对

使用道具 举报

发表于 2010-1-29 09:05:53 | 显示全部楼层
具体怎样做我也不太清楚,我只能把机制给你说一下,在x11或者dfb的情况下,所有事件都是通过窗口管理器去分发的。那么问题就变成了,能不能在窗口管理器里面放回调,或者钩子这样的问题了。
回复 支持 反对

使用道具 举报

发表于 2010-1-29 12:12:30 | 显示全部楼层
谢谢楼主,再问一下,linux下有钩子这种函数么,我看glib里面有g_hook_list_init这种函数,不知道是不是所谓的钩子?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表