一、初始化GTK+

写GTK+程序需要调用gtk_init函数对GTK+库函数进行初始化。

1.

名称::

gtk_init

功能:

初始化GTK+库

头文件:

#include <gtk/gtk.h>

函数原形:

void gtk_init(int *argc,char ***argv);

参数:

argc   指向主函数argc的指针

argv   指向主函数argv的指针

返回值:

在你程序使用到GTK+工具库之前,必须对它进行初始化。gtk_init可以初始化GTK+工具库。gtk_init的参数的指向主函数argc,argv的指针,它可以改变一些不满足GTK+函数要求的命令行参数。

因为gtk_init函数没有返回值,所以如果在初始化过程中发生错误程序就会立即退出。

2.

名称::

gtk_init_check

功能:

初始化GTK+库

头文件:

#include <gtk/gtk.h>

函数原形:

gboolean gtk_init_check(int *argc,char ***argv);

参数:

argc   指向主函数argc的指针

argv    指向主函数argv的指针

返回值:

成功返回TURE,出错返回FALSE。

还有一个GTK+库初始化函数gtk_init_check,它的作用和gtk_init完全相同。唯一的区别是gtk_init_check有返回值,可以判断初始化是否成功。

二、建立窗口

GTK+的构件是GUI的组成部分。窗口、检查框、按钮和编辑字段都属于构件。通常将构件和窗口定义为指向GtkWidget结构的指针。在GTK+中,GtkWidget是用于所有构件和窗口的通用数据类型。

GTK+库进行初始化后,大多数应用建立一个主窗口。在GTK+中,主窗口常常被称为顶层窗口。顶层窗口不被包含在任何其他窗口内,所以它没有上层窗口。在GTK+中,构件具有父子关系,其中父构件是容器,而子构件则是包含在容器中的构件。顶层窗口没有父窗口,但可能成为其他构件的容器。

在GTK+中建立构件分两步:建立构件,然后使它可以看得见。gtk_window_new函数负责建立窗口。gtk_widget_show函数负责使它成为可见。

2.

名称::

gtk_window_new

功能:

建立窗口

头文件:

#include <gtk/gtk.h>

函数原形:

GtkWidget * gtk_window_new(

参数:

返回值:

3.

名称::

gtk_widget_show

功能:

显示窗口

头文件:

#include <gtk/gtk.h>

函数原形:

gtk_widget_show( GtkWidget *window)

参数:

返回值:

三、GTK+的事件循环

对GTK+进行初始化并将窗口和构件置于屏幕以后,程序就调用get_main函数等待某种事件的执行。

4.

名称::

gtk_main

功能:

等待事件的发生

头文件:

#include <gtk/gtk.h>

函数原形:

void gtk_main(void);

参数:

返回值:

我们在来看看第一章的程序。也许大家就会理解上面函数的作用了。

/*base1.c*/

#include <gtk/gtk.h>

int main(int argc, char* argv[])

{

GtkWidget *window;

gtk_init(&argc,&argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_widget_show(window);

gtk_main();

return FALSE;

}

$ gcc -o base1 base1.c 'pkg-config --cflags --libs gtk+-2.0'

$./base1

程序开始定义了一个窗体,然后用函数gtk_init初始化GTK+库。用函数gtk_window_new创建一个窗体,用get_widget_show显示该窗体。程序最后调用gtk_main()进入主循环,等待各种事件的发生.

注意该程序不能正常退出,原因是程序没有回呼函数。关于回呼函数我们将会在下面介绍。

四、结束应用程序

5.

名称::

gtk_main_quit

功能:

结束应用程序

头文件:

#include <gtk/gtk.h>

函数原形:

void gtk_main_quit(void);

参数:

返回值:

gtk_main_quit函数可以结束程序

五、回调函数

由于程序必须能够对用户的操作做出相应,在基于GUI的程序设计中信号是必要的。移动鼠标,按下按钮,敲入正文或者关闭窗口,将给应用软件的回呼函数提供信号。信号可能需要应用软件来加以处理。如:字处理软件有使字体变黑的按钮。如果用户按下了按钮,就需要调用使字体变黑的程序。与此类型,如果用户关闭了主窗口,在实际关闭窗口以前要进行某些处理(如保存文件,清除等)。

在GTK+中经常产生各种信号,多数情况下信号被忽略。以按钮构件为例,应用软件有专门用于按钮的信号。当用户按下鼠标或释放鼠标按钮时,当用户电机鼠标时,或者当鼠标移过按钮或离开按钮时都产生各自的信号。应用程序可以忽略掉一些信号,只对感兴趣的事件加以处理。

当需要对信号进行处理时,需要用GTK+登记回调函数,并将它和构件联系在一起。构件可以登记回调函数,回调函数可与多个构件联系在一起。

6.

名称::

g_signal_connect

功能:

信号登记函数

头文件:

#include <gtk/gtk.h>

函数原形:

gulong g_signal_connect(gpointer *object,const gchar *name,GCallback func,gpointer data);

参数:

object   发出信号的控件

name    信号名称

func     回调函数(对信号要采取的动作)

data     传给回调函数的数据

返回值:

g_signal_connect用于登记一个GTK+信号,其功能有点像普通信号登记函数signal.当某个空间发出信号,程序就会去执行由g_signal_connect登记的回调函数。

下面我们把上面的程序稍微改动一下,使它可以正常退出。

/*base2.c*/

#include <gtk/gtk.h>

int main(int argc, char* argv[])

{

GtkWidget *window;

gtk_init(&argc,&argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

g_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

gtk_widget_show(window);

gtk_main();

return FALSE;

}

$ gcc -o base2 base2.c 'pkg-config --cflags --libs gtk+-2.0'

$./base2

其中destroy为GTK+最基本信号之一,当关闭窗口时,发出该信号。还有一个是delete_event,当将要关闭窗口时,发出该信号。

程序中添加了gtk_signal_connect函数,当用户关闭窗口时gtk_signel_connect函数调用gtk_main_quit函数来关闭程序。

大家也可以编写回调函数,在回调函数里结束程序。这样做的好处是当用户试图退出一个程序时,程序可以提示你是否真的退出。

自己编写回调函数的程序例子:

/*base2.c*/

#include <gtk/gtk.h>

ginit destroy(GtkWidget *,gpointer)

int main(int argc, char* argv[])

{

GtkWidget *window;

gtk_init(&argc,&argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

g_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(destroy),NULL);

gtk_widget_show(window);

gtk_main();

return 0;

}

ginit destroy(GtkWidget *widget,gpointer gdata)

{

g_print(“Quitting!/n”);

gtk_main_quit();

return(FALSE);

}

$ gcc -o base3 base3.c 'pkg-config --cflags --libs gtk+-2.0'

$./base3

注意,当关闭窗口时,将在启动应用程序的控制台上显示Quitting消息。这是由回调函数显示的。

从上面的程序可以看到,g_signal_connect对应的回调函数形式为ginit destroy(GtkWidget *widget,gpointer gdata)有两个参数。GTK+还有一个信号登记函数。g_signal_connect_swapped.,它的作用和gtk_signal_connect相同。不同的是g_signal_connect_swapped.对应的回调函数只有一个参数,形式为ginit destroy(GtkWidget *widget)。是因为GTK+有一些只接收一个参数的函数(比如gtk_widget_destroy)。

7.

名称::

g_signal_connect_swapped

功能:

信号登记函数

头文件:

#include <gtk/gtk.h>

函数原形:

gulong g_signal_connect_swapped(gpointer *object,const gchar *name,GCallback func,gpointer *widget);

参数:

object   发出信号的控件

name    信号名称

func     回调函数(对信号要采取的动作)

winget    传给回调函数的数据

返回值:

六、其它窗体函数

在上面我们已经介绍了怎样去建立一个窗体,下面我们来介绍其它的窗体函数。

8、

名称::

gtk_window_set_title

功能:

修改窗体标题

头文件:

#include <gtk/gtk.h>

函数原形:

void gtk_window_set_title(GtkWindow *window,const gchar *title);

参数:

window  窗体名

title     窗体标题

返回值:

gtk_window_set_title函数可以修改程序的标题。窗口的标题会出现在标题栏中。在X窗体系统中,标题栏被窗体管理器管理,并由程序员指定。标题应该帮助用户区分当前窗体与其它窗体。

如果我们想把一个程序的标题修改为“Main Window”.我们可在程序中加入

gtk_window_set_title(GTK_WINDOW(window),”Main Window”);

9.

名称::

gtk_window_set_resizable

gtk_window_get_resizable

功能:

获得/修改窗体的伸缩属性

头文件:

#include <gtk/gtk.h>

函数原形:

void gtk_window_set_resizable(GtkWindow *window,gboolean resizable);

gboolean gtk_window_get_resizable(GtkWindow *window);

参数:

window         窗体名

resizable        窗体是否可以伸缩

返回值:

无( gtk_window_set_resizable)

如果可以伸缩为TRUE,如果不可以伸缩为FALSE( gtk_window_get_resizable)

gtk_window_get_resizable可以获得窗体的伸缩属性,系统默认窗体是可伸缩的。gtk_window_get_resizable有一个返回值,如果可以伸缩为TRUE,如果不可以伸缩为FALSE。

gtk_window_set_resizable可以修改窗体的伸缩属性,由第二参数指定。

如果我们想把一个窗体指定为不可伸缩的我们可以在程序中添加:

gtk_window_set_resizable(GTK_WINDOW(window),FALSE);

,它通常在回调函数中被调用。下面我们介绍回调函数。

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

GTK+图形化应用程序开发学习笔记(三)—窗体相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Polyworks脚本开发学习笔记(三)-TREEVIEW进阶操作

    Polyworks脚本开发学习笔记(三)-TREEVIEW进阶操作 移动/交换对象的顺序 移动对象的顺序 TREEVIEW FEATURE MOVE ( 1,2 ) 将索引号为1和2的特征交换位置 T ...

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

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

最新文章

  1. 如何挑选深度学习 GPU?
  2. python随机生成车牌_Python实现随机生成任意数量车牌号
  3. linux下载github中的文件git, wget
  4. java 假设当前时间_java——推断日期是否在今天之前
  5. 《计算机网络》谢希仁第五版考试重点整理
  6. c#winform演练 ktv项目 制作歌曲播放列表
  7. Centos7-安装Gradle4.10
  8. 再谈软件研发管理体系建设
  9. 思科模拟器Cisco Packet Tracer 7.3 for Mac 安装和汉化(带安装包和汉化包)
  10. CommScope将收购ARRIS:交易金额约达74亿美元,将加速实现CommScope塑造未来通信网络的愿景
  11. flutter shared_preferences 异步变同步
  12. 冉宝的每日一题-8月15日-- 拓扑排序。
  13. 2013中国Linux内核开发者大会亮点汇总
  14. 九度OJ 1349 数字在排序数组中出现的次数 -- 二分查找
  15. 《Web安全之深度学习实战》笔记:第六章 垃圾邮件识别
  16. 百度网盘8种批量修改文件名称重命名的方法
  17. 《通天秘笈》学习笔记
  18. 在线学习python
  19. 关于一个任意文件上传漏洞场景的讨论
  20. 数学建模系列-预测模型(六)---微分方程模型

热门文章

  1. 0108--/** * 根据最大尺寸和字体计算文字的实际尺寸 */
  2. 由底层和逻辑说开去--c++之引用的深入剖析
  3. android animation学习
  4. 【Java从0到架构师】Spring - 事务管理
  5. 【Python笔记】使用 re 模块实现正则表达式操作
  6. 设置ecshop2.7首页幻灯片宽度为100%
  7. Linux 的字符串截取很有用。有八种方法。
  8. mysql8 :客户端连接caching-sha2-password问题
  9. python进阶20装饰器
  10. stream().map().collect()用法