博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

湖光倒影

我的技术blog
   hgdy.cublog.cn
关于作者  
姓名:刘宁
职业:PF开发
年龄:23
位置:大连
个性介绍:湖光倒影,碧波涟涟,沉下的是微微的清醒的痛,折射的却是最闪烁的一瞬。

我的分类  




GTK+图形化应用程序开发学习笔记(四)—容器.构件(1)

一、构件

       上一章我们介绍了如果创建一个窗体,但应用程序仅有一个窗体是不够的我们必须在窗体上添加一些东西(如:按钮,文本框等)。这些东西被称为构件,而我们添加的构件的载体被称为容器(如:主窗体)。

构件(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函数可以获得构件的大小。

       如:设置一个窗体为长500400

       gtk_widget_set_size_request(window,500,400);

 

 

 发表于: 2007-05-23,修改于: 2007-06-09 22:11 已浏览2131次,有评论2条 推荐 投诉

  网友评论
  qing 时间:2007-07-14 12:03:58 IP地址:125.78.194.★
gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL);
改为
   gtk_signal_connect (GTK_OBJECT (window), "destroy",
                       GTK_SIGNAL_FUNC(gtk_main_quit), NULL);

  湖光倒影 时间:2007-07-14 12:21:38 IP地址:218.25.161.★
用G_CALLBACK和用GTK_SIGNAL_FUNC好像都可以吧.


  发表评论



Copyright © 2001-2010 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.03767

京ICP证041476号