2006年5月22日星期一

GTK+编程FAQ之一

开场白:

GTK+是非常流行的GUI库,可以运行在Windows, XWindow(各种Unix环境),Framebuffer(各种嵌入式设备)和MacOS之上。很长时间以来,我用GTK+写一些简单的程序,所用语 言一般是c++或python,但我一直没有系统的看过GTK+的文档,所以有时候想实现一些功能却不知如何做。相信很多使用GTK+的朋友也遇到过类似 的情况,当然这些问题大多并不难,如果细细找一下文档,一般都能很快找到答案。
从本文开始,我将记录这些问题,希望能节省各位的时间,对各位有所帮助。
问题1:我想用GTK+,但是我不喜欢用C来写GUI程序,没有别的选择吗?

GTK+有很多语言的binding,除了使用各种脚本语言外,你还可以使用它的C++ Binding,gtkmm。实际上本文作者也非常讨厌用c来写gtk+程序,强烈推荐使用gtkmm。
问题2:如何提高编译的速度,特别是在使用gtkmm的时候?

这个问题并不局限于gtk+的开发,很多人抱怨gcc的编译速度,实际上使用预编译头文件可以大大提高编译速度。见作者《使用预编译头文件大大提高g++编译速度》一文。
问题3:没有可视化的界面设计工具吗?

glade是gtk+的可视化界面设计工具,它生成的glade文件是界面信息的xml描述。程序通过glade库加载xml文件就能声称界面。
问题4:如何产生异形的窗口(非矩形窗口)?

使用gtk_widget_shape_combine_mask函数来指定一个widget要显示的区域。
区域是由一个GdkBitmap定义,可以用gimp绘制你所需的形状,存成xdm图形文件,然后直接在源程序里include该文件,用gdk_bitmap_create_from_data来生成对应的GdkBitmap。
问题5:如何在系统托盘里放置图标?

问题6:如何设置主题?

问题7:如何使窗口没有title bar,不出现在任务栏里?

在XWindow下,窗口的title bar(包括最大化最小化按钮等等)是由窗口管理器(window manger,wm)负责绘制的。如果你不想让wm多管闲事,可以使用gtk_window_set_decorated(false)来通知wm。
同样,使用gtk_window_set_skip_taskbar_hint(false),你的窗口就不会出现在任务栏里了。
你也可以在使用glade创建界面文件的时候指定窗口的这些属性。
问题8:如何使用Gtk on framebuf

即将发布的2.10版gtk+带有对framebuf的支持(此前的版本需要额外的补丁)。
Debian SID的用户可以直接安装libgtk+2.0-directfb-dev这个包。

没有评论: