酷文首页  
站内搜索:
网站地图 | RSS订阅 | 收藏本站
经济论文
证券金融
工商管理
会计审计
法学论文
医药论文
社会论文
教育论文
计算机论文
艺术论文
哲学论文
财政税收
财务管理
公共管理
理学论文
政治论文
文学论文
工学论文
文化论文
实用文档
应用文
自考成考
演讲稿
法律文书
子栏目导行↓
网站赞助商↓
本类热点↓
本类更新↓
热门标签↓
网摘收藏↓

GTK图形编程

作者:不详
来源:网络
点击:
载入中...
加入时间:2007-03-26
字体大小:[  ]

将一个widget组件放入一个表格,用下面的函数:

void gtk_table_attach( GtkTable *table, GtkWidget *child, gint left_attach,

gint right_attach, gint top_attach, gint bottom_attach,

gint xoptions, gint yoptions, gint xpadding, gint ypadding );

left_attach参数和right_attach参数将指出在哪儿放置组件,以及用了多少盒子。如果你想在两行两列的表格中的右下小格中加入一个按钮,并且想让按钮充满那个小格,则参数可以选择left_attach = 1, right_attach = 2, top_attach = 1, bottom_attach = 2。其实left_attach也就是组件所在小格的左边框是表格的第几条边数,其它依此类推。

参数xoptions和yoptions是用来确定打包选项的,可以用OR来选择多个选项。

调节器
GTK有很多组件可以用鼠标或键盘来调整,例如范围组件(Range Widget)。还有一些组件在整个数据区域的一部分是可调整的,例如文本组件(Text Widget)和视口组件(Viewport Widget)。

很明显,程序是要能够对可调整组件所产生的变化进行处理。一种解决办法是让可调整组件在释放自己的信号时,将调整数据值传递信号处理器。或者用另外一种解决方法将调整数据值放入一个数据结构,由程序访问该结构来获得改变的参数值。有时候你可能需要将几个可调整组件的调节相关联,调整一个也会导致另一个的变化。最明显的例子就是滚动条与文本编辑框组件的处理。如果这些相关联的组件分别有自己处理调整数据的方法,则程序员必须自己写一个信号处理器,将一个组件的调整数据转换成另一个组件的调整数据,并调用调整设置函数将该值设置进去。

GTK调用了调节器成功的解决了这个问题。调节器不是组件,而是存储和传递调整数据的结构。最典型的调整器应用是存储配置参数和范围组件的值。不同的是调整器也是从对象(Object)继承而来的,它有许多不同于数据结构的特性。最重要的是,它也会释放信号,并且这些信号不仅可以被程序捕获来响应用户的调整和编辑,还可以在可调整组件中透明的传播调整数据。

一般调节器会创建组件时自动创建。例如让文本组件和滚动条组件用同一个调节器如下所示:

text = gtk_text_new (NULL, NULL);

/* 将刚创建的调节器用于垂直滚动条 */

vscrollbar = gtk_vscrollbar_new (GTK_TEXT(text)->vadj);

调节器是从对象Object继承下来的。所以它与其它的组件对象一样,能够产生信号。当好几个组件共享一个调节器时,它们都会和一个信号处理器相关联。这个信号处理器是用来处理“value_changed”信号的,跟程序中处理信号是一样。下面是在GtkAdjustmentClass结构中该信号的定义:

void (* value_changed) (GtkAdjustment *adjustment);

不同的可调整组件都用一个调节器时,任何一个组件发生调整变化都会产生该信号。有两种情况会导致这个现象的发生。第一种情况是用户在用鼠标或键盘调整该组件(例如拉滚动条),或者直接在程序中用gtk_adjustment_set_value()函数来改变调节器中的value值。

当调节器的upper参数和lower参数被重新配置时,就象用户需要给一个文本编辑框加入了更多的文本后,调节器就会释放出“changed”信号。它的定义如下:

void (* changed) (GtkAdjustment *adjustment);

范围组件将该信号与一个信号处理器相关联,并随时在面板上反映参数的变化。举个例子,滚动条中滑动键的大小与调节器中upper,lower值之差正好成反比。一旦前者有任何改变,面板上的显示也会相应产生变化。

不需要在程序中将一个信号处理器与该信号相关联,一切都是GTK完成的。如果你直接设置了调节器的这些参数,则需要在程序中调用下面的语句来释放信号:

gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "changed");

创建组件小结
从上面可看出,创建一个widget组件可以用以下几个步骤完成:

gtk_*_new()—调用一个非常有用的函数来产生一个新的widget组件。

4.2用gtk_box_pack_start()函数连接所有的信号和事件,产生相应的事件处理器来调用回调函数。

4.3设置widget组件以及调节器的特性。

4.4用合适的函数将widget组件打包到一个容器(盒子或表格)中,例如gtk_box_container_start()函数或者gtk_container_add()函数等。

4.5用gtk_widget_show()函数来显示组件。

用上述方法可创建出程序员所需要的任意窗口构件,再将容器打入窗口并显示窗口之后,程序便进入主循环睡眠状态,主程序编制也就结束了。事件的处理逻辑放到回调函数中编制。

编译程序用下面的命令:

gcc my_prog.c –o my_prog.o –lgtk –lgdk ↙

完成后在Xwindow环境下运行my_prog.o程序即可。

目前X窗口(Xwindow)和GNU编译系统已成为应用linux或unix操作系统的计算机工作站和大型计算机上最主要的图形用户界面系统,在微机上也有广

泛应用。而GTK正是两者结合的编程开发包。它比以往用的Xwindow/Motif编程更为简单方便,功能也很强大,有着较好的应用前景。目前网上已经有很多利用该软件包开发出来的自由发布软件,极大的丰富了Linux平台的应用。

[参考文献]

1.《GTK Turtoil》 Peter Mattis, Spencer Kimball, Josh MacDonald著http://www.gtk.org

2.《linux系统管理指南》 M.F.Komarinski,C.Collet著 晓冬 马丁译 1999,清华大学出版社

3.《UNIX网络编程》 W.Richard Stevens著 1998,清华大学出版

转贴于 酷文网-论文下载中心 http://www.coolwen.net


共2页: 上一页 [1] 2 下一页

网摘收藏:
 -> 在百度中搜索:GTK图形编程
 -> 在Google中搜索:GTK图形编程
免责声明 | 关于我们 | 广告联系 | 友情链接 | 网站地图 | 共同合作
免费论文 毕业论文 毕业论文范文 酷文网(www.coolwen.net) 版权所有 coolwen.net 2007,All Rights Reserved
E-mail:hui_love#tom.com(为防止垃圾邮件请把#换成@) 点击这里给我发消息 点击这里给我发消息
湘ICP备07003917号