一、构件

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

构件(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可以得到容器边缘的大小。

转载于:https://www.cnblogs.com/JPAORM/archive/2011/12/21/2510062.html

GTK+图形化应用程序开发学习笔记(四)—容器、构件相关推荐

  1. GTK+图形化应用程序开发学习笔记(五)—组装盒、组合表、固定容器构件

    GTK+图形化应用程序开发学习笔记(五)-组装盒.组合表.固定容器构件 一.组装盒 组装盒(GtkBox)也称为组合构件.使用组装盒可以将多个构件放在一个容器中.容器可以把组装盒看作是一个构件.不像按 ...

  2. GTK+图形化应用程序开发学习笔记(一)—概述

    GTK+图形化应用程序开发学习笔记(一)-概述 一.什么是GNOME. GNOME的意思是"GNU Network Object Model Environment"(GNU网络对 ...

  3. GTK+图形化应用程序开发学习笔记(六)—按钮

    一.常用构件函数 最常用的构件是按钮构件.录入字段构件.列表框构件和复合框构件.所有建立按钮的函数返回指向GtkWidget的指针.GtkWidget指针能够调用对构件进行操作的通用函数.函数gtk_ ...

  4. GTK+图形化应用程序开发学习笔记

    http://blog.chinaunix.net/u/22935/showart_305786.html 一.初始化GTK+ 写GTK+程序需要调用gtk_init函数对GTK+ 库函数进行初始化. ...

  5. GTK+图形化应用程序开发学习笔记(三)—窗体

    一.初始化GTK+ 写GTK+程序需要调用gtk_init函数对GTK+库函数进行初始化. 1. 名称:: gtk_init 功能: 初始化GTK+库 头文件: #include <gtk/gt ...

  6. GTK+图形化应用程序开发学习笔记(二)—Glib库

    在学习GTK+之前我们需要先学习一下 glib的有关知识.因为我们将会在以后的学习中遇到这些知识.由于本笔记不是专门介绍glib的,所以下面的介绍不会太详细.   一.什么是glib库        ...

  7. GTK+图形化应用程序开发学习笔记(七)—标签构件.事件盒构件

    一.标签构件 标签构件(GtkLabel)是GTK中最常见的构件,它是静态的不可编辑的字段.在屏幕上,常常用标号说明其他字段.在按钮上设置标签用来说明按钮,或者放在其他字段的旁边对该字段提供说明.它不 ...

  8. Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐

    Polyworks脚本开发学习笔记(四)-利用FILE IMPORT进行数据导入及对齐 导入参考及数据 FILE IMPORT_REFERENCE导入参考的CAD文件如igs格式 括号内参数分别为(导 ...

  9. 微信小程序开发学习笔记一

    微信小程序学习笔记(一) 环境使用及创建项目 文件目录设置 JS文件 环境使用及创建项目 环境使用:微信开发者工具 一个微信号只能开发一个微信小程序. 在微信小程序开发手册下载最新版本,学习不要bet ...

最新文章

  1. cc.tween 的call()不执行
  2. java 图片不更新,图片下传页面不能及时更新,求解
  3. php获取longtext字段为空,php – 在longtext字段上准备好的mysqli select语句将返回空...
  4. Windows 下使用 SNMP 来管理网络
  5. android 短信时间排序,仿iphone中短信以及通话记录的时间显示
  6. 02_3中方式的反射,通过Class.forName获得Class对象,通过类.class获得字节码对象,通过类实例.getClass()的方式获得Class对象
  7. 华为云阳云计算外包给哪家公司的_长春作为东北中心,华为四大件已经配齐,绝了!...
  8. Vue2.x源码学习笔记-Vue实例的属性和方法整理
  9. Oracle学习(五)DBLINK
  10. AUTOSAR从入门到精通100讲(四十六)-CANoe工具使用-实现CAN通道的收、发、录、回放报文
  11. “睡服”面试官系列第十五篇之对象的扩展(建议收藏学习)
  12. SSM框架整合一(springmvc+spring+mybatis+maven+tomcat)
  13. 飞鸽传书为什么传书?
  14. 如何写一篇合格的论文(清华大学刘知远)
  15. 【Elasticsearch】 6 种 能使 es 挂掉的方法
  16. 什么水平才能任教清华计算机系?
  17. RESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))
  18. 詹姆斯高斯林_詹姆斯·高斯林接下来要做什么?
  19. 数字孪生交通仿真(一)
  20. TDM阅读笔记,在推荐系统的应用

热门文章

  1. 改良版class选择器
  2. linux设备模型深探
  3. 【数据库系统设计】关系数据库标准语言SQL(3)
  4. 跟我一起学jQuery——第二集(未完待续..)
  5. 搞不明白老板想要看哪种报表,熬夜做到两点也是白费28
  6. 25岁该有多少存款?数据分析带你揭露打工人的工资真相
  7. flex4.5新特征
  8. centos php 5.2,CentOS服务器单独升级 php5.1 到 5.2版本
  9. linux判断是否能上网_如何判断飘窗是否能砸掉?砸掉飘窗可以怎么利用?
  10. vuecli工程里面引入图片