一、构件
上一章我们介绍了如果创建一个窗体,但应用程序仅有一个窗体是不够的我们必须在窗体上添加一些东西(如:按钮,文本框等)。这些东西被称为构件,而我们添加的构件的载体被称为容器(如:主窗体)。
构件(GtkWidget)有一些统一的函数对其操作,通常情况下我们定义一个GtkWidget类型的构件指针。再根据不同的需要进行转换。
添加一个构建分5个步骤。
1、建立构件,并取得GtkWidget指针。
2、对构件设置回呼函数。一些构件不能有回调函数;一些构件不需要回调函数;但是,许多构件用回调函数与用户进行对话。
3、设置构件的特性。例如,对按钮设置标号,或使标号左对齐等。有时可以用建立构件的函数设置特性。
4、将构件加到容器中。除非构件是顶层窗口,所有其他构件都必须将它们加到可视容器内才能显示。
5、使构件成为可见。使构件成为可见通常被最后,因为它改变了窗口的性质。
二、构件的敏感性
构件可以是敏感或不敏感的,不敏感的构件不能对输入进行响应。一般不敏感的构件是灰色的。用gtk_widget_set_sensitive函数改变构件的敏感性。
1.
名称::
|
gtk_widget_set_sensitive
|
功能:
|
改变构件的敏感性
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_widget_set_sensitive(GtkWidget *widget,gboolean setting);
|
参数:
|
widget构件
gboolean构件的敏感性
|
返回值:
|
无
|
构件缺省是敏感的。只有构件的所有容器是敏感的,构件才能是敏感的。也就是,可以通过设置容器的敏感性来让整个容器内的构件敏感(或不敏感)。
请看下面的程序例子:
#include <gtk/gtk.h>
int main(int argc,char *argv[ ])
{
GtkWidget *window;
GtkWidget *button;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);
button=gtk_button_new_with_label(“button”);
gtk_container_add(GTK_CONTAINER(window),button);
gtk_widget_set_sensitive(button,FALSE);
gtk_widget_show(button);
gtk_widget_show(window);
gtk_main();
}
|
运行程序后会得到如下界面,可以看到按纽是灰色的,并且不可以用。
三、构件的类型转换
在GTK中,所有构件的存储形式都是GtkWidget,但是许多函数都需要指向某种构件类型(比如GtkButton)的指针作为参数。虽然所有构件都是从GtkWidget派生而来的,但是编译器并不理解这种派生和继承关系。为此,GTK引进了一套类型转换系统。这些系统都是通过宏实现的。这些宏测试给定数据项的类型转换能力,并实现类型转换。
下面几个宏我们以后会经常遇到:
GTK_WIDGET(winget)
GTK_OBJECT(object
GTK_SIGNAL_FUNC(function)
GTK_CONTAINER(window)
GTK_BOX(box)
四、统一构件函数
2.
名称::
|
gtk_widget_destroy
|
功能:
|
删除一个构件
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_widget_destroy(GtkWidget *widget);
|
参数:
|
widget构件
|
返回值:
|
无
|
gtk_widget_destroy函数可以删除一个构件,它非常简单,我们这里就不再介绍了。
3.
名称::
|
gtk_widget_hide
|
功能:
|
隐藏一个构件
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_widget_hide (GtkWidget *widget);
|
参数:
|
widget构件
|
返回值:
|
无
|
gtk_widget_hide函数可以使构件变得不可见,当实际上构件还存在,你还可以调用gtk_widget_show重新显示他们。
4.
名称::
|
gtk_widget_set_size_request
gtk_widget_get_size_request
|
功能:
|
设置/获得构件大小
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_widget_set_size_request (GtkWidget *widget, gint *width, gint *height);
void gtk_widget_get_size_request (GtkWidget *widget, gint *width, gint *height);
|
参数:
|
widget构件
width构件宽度
height构件长度
|
返回值:
|
无
|
gtk_widget_set_size_request可以设置构件的大小,gtk_widget_get_size_request函数可以获得构件的大小。
如:设置一个窗体为长500宽400。
gtk_widget_set_size_request(window,500,400);
五、容器
容器(GtkContainer)可以被看成是一个构件的载体,各种构件通过放置在容器中而被显现出来。我们知道顶层窗口可以作为容器,然而还有许多构件也可以作为容器,如按钮。事实上,在建立带标号的按钮构件时,在按钮构件中已经放入了标号构件。
对于容器只能容纳一个构件。为什么是这样,如果你增加第二个按钮,只有第一个按钮是可见的。绕过这一限制的方法是使用组合框或组合表。
六、统一容器函数
5.
名称::
|
gtk_container_add
|
功能:
|
向容器里添加构件
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_container_add(GtkContainer *container, GtkWidget *widget);
|
参数:
|
container容器
widget构件
|
返回值:
|
无
|
gtk_container_add可以向容器里添加构件,但要注意一个容器只能容纳一个构件。
6.
名称::
|
gtk_container_remove
|
功能:
|
从容器里移出构件
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_container_remove(GtkContainer *container, GtkWidget *widget);
|
参数:
|
container容器
widget构件
|
返回值:
|
无
|
gtk_container_remove函数和gtk_container_add函数的功能正好相反。移出的构件并不消失,还可以添加到容器里。
7.
名称::
|
gtk_container_set_border_width
gtk_container_get_border_width
|
功能:
|
设置/获得容器边缘大小
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
void gtk_container_get_border_width (GtkContainer *container,guint border_width);
guint gtk_container_get_border_width (GtkContainer *container);
|
参数:
|
container容器
border_width容器边缘大小
|
返回值:
|
无
|
gtk_container_set_border_width可以设置容器边缘大小,gtk_container_get_border_width可以得到容器边缘的大小。
分享到:
相关推荐
学习GTK图形化应用程序开发很好的资料!!
GTK+图形化应用程序开发学习笔记 从网上收集,整理成pdf格式
第一部分介绍Linux GUI编程架构以及编程基础知识,第二部分介绍Linux 编程常用C语言函数库glibc、构件库Gtk+、Gnome,第三部分介绍Linux下的GUI生成器Glade,第四部分介绍Linux编程调试工具gdb及xxgdb。第五部分包括...
PDF电子书《用GTK+和GDK开发Linux图形用户界面应用》
用 GTK+和GDK开发linux图形用户界面应用
关于图形库GTK+2.0的一本教材,例子丰富……对刚刚入门的人应该有用
gtk+开发工具gtk+开发工具gtk+开发工具
Linux应用程序开发指南:使用gtk+ gnome库Linux应用程序开发指南:使用gtk+ gnome库
Linux应用程序开发 Gtk+/Gnome开发,学习GUI图形界面
GTK+ 参考手册 for GTK+ 2.14.3,最新英文版 GTK+ is a library for creating graphical user interfaces. It works on many UNIX-like platforms, Windows, and on framebuffer devices. GTK+ is released under ...
特别是被GNOME选中使得GTK+广为流传,成为Linux下开发图形界面的应用程序的主流开发工具之一,当然GTK+并不要求必须在Linux上,事实上,目前GTK+已经有了成功的windows版本. GTK+ 是一种图形用户界面(GUI)工具...
基于C gtk/gtk+ sqlite3选课系统的开发
第一部分介绍Linux GUI编程架构以及编程基础知识,第二部分介绍Linux 编程常用C语言函数库glibc、构件库Gtk+、Gnome,第三部分介绍Linux下的GUI生成器Glade,第四部分介绍Linux编程调试工具gdb及xxgdb。第五部分包括...
第一部分介绍Linux GUI编程架构以及编程基础知识,第二部分介绍Linux 编程常用C语言函数库glibc、构件库Gtk+、Gnome,第三部分介绍Linux下的GUI生成器Glade,第四部分介绍Linux编程调试工具gdb及xxgdb。第五部分包括...
GTK+程序设计中文版 .pdf
2.2 第一个Gtk+应用程序 9 2.2.1 一个什么也不能做的窗口 9 2.2.2 示例代码的含义 9 2.2.3 GTK的Hello World 10 2.2.4 Gtk+的信号和回调函数原理 12 2.2.5 Hello World代码解释 14 2.2.6 运行helloworld 17 2.3 ...
本书详细介绍了两种Linux图形用户界面开发技术:GTK+/GNOME。主要内容包括:GUI的基本概念,GLib,GTK+及GNOME的简介,各种GUI元素的创建与使用,bIDE,Glade等等。最后通过两个综合实例来巩固所学知识。本书实例...
本GTK+程序初级教程采用了“引导”式的方法来教你如何使用GTK+。本教程所用的编程语言为C语言。并且整个教程中方法已经在Linux中测试通过。本教程适用GTK+的初级兼代中级水平的程序员。 GTK+ 是一种函数库是用来...