`

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

 
阅读更多

一、初始化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

其中destroyGTK+最基本信号之一,当关闭窗口时,发出该信号。还有一个是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);

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


分享到:
评论

相关推荐

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

    这个“GTK+图形化应用程序开发学习笔记”包含了关于使用GTK+进行GUI编程的详细教程和实践案例。 GTK+的核心特性包括跨平台支持、丰富的组件库、强大的主题引擎以及对多种编程语言的绑定,如C、C++、Python、Vala等...

    PDF电子书《用GTK+和GDK开发Linux图形用户界面应用》

    根据给定的信息,我们可以推断出《用GTK+和GDK开发Linux图形用户界面应用》是一本专注于使用GTK+和GDK在Linux环境下构建GUI应用程序的专业书籍。虽然提供的部分内容并没有直接涉及具体的技术细节,但我们可以结合...

    GTK+程序设计中文版 .pdf

    GTK+ 程序设计中文版 GTK+ 是一种函数库,用来帮助制作图形交互界面。整个函数库都是由 C 语言来编写的。GTK+ 函数库通常也叫做 GIMP 工具包,...了解 GTK+ 的使用和应用将有助于您更好地开发图形交互界面应用程序。

    用 GTK+和GDK开发linux图形用户界面应用

    GTK+(GIMP Toolkit)和GDK(GIMP Drawing Kit)是用于开发Linux和其他Unix-like系统上图形用户界面(GUI)的应用程序的开源工具包。它们是GNU项目的一部分,广泛应用于自由和开放源码软件中。这篇文档将深入探讨...

    LINUX应用程序开发指南:使用GTK+ GNOME库

    在Linux操作系统中,开发应用程序是一项常见任务,而使用GTK+和GNOME库是构建图形用户界面(GUI)程序的一种流行方式。本指南将深入探讨如何利用这些强大的工具进行高效的编程。 GTK+(GIMP Toolkit)是一个跨平台...

    Gtk+图形界面开发

    Gtk+图形界面开发是Linux应用程序开发中的一个重要领域,它主要用于构建美观、功能丰富的图形用户界面(GUI)。Gtk+是一个跨平台的 widget 工具包,最初设计用于GNOME桌面环境,但现在也被广泛应用于其他Linux发行版...

    GTK+GNOME程序设计PDF(高清)2

    本书详细介绍了两种Linux图形用户界面开发技术:GTK+/GNOME。主要内容包括:GUI的基本概念,GLib,GTK+及GNOME的简介,各种GUI元素的创建与使用,bIDE,Glade等等。最后通过两个综合实例来巩固所学知识。本书实例...

    基于C gtk/gtk+ sqlite3选课系统的开发

    在本文中,我们将深入探讨如何使用C语言,结合GTK+/GTK+图形库和SQLite3数据库来开发一个选课系统。这个项目将展示如何利用这些技术创建一个用户友好的图形界面,以及如何处理和存储数据。 首先,让我们了解C语言。...

    读书笔记 -《LINUX应用程序开发指南:使用GTK+ GNOME库》- (1)

    《Linux应用程序开发指南:使用GTK+ GNOME库》是面向Linux平台的应用程序开发人员的一本重要参考书籍,主要讲解如何利用GTK+和GNOME库来构建高效、用户友好的图形界面应用。这篇读书笔记将深入探讨其中的核心概念和...

    gtk+-bundle_2.24.10-20120208_win32.zip

    总之,"gtk+-bundle_2.24.10-20120208_win32.zip"是一个为Windows平台准备的完整GTK+开发工具包,它让开发者能够在Windows上利用GTK+的强大功能创建美观且跨平台的图形界面应用程序。通过深入学习和实践,开发者可以...

    Linux应用程序开发指南:使用gtk+ gnome库

    本指南专注于使用GTK+和GNOME库进行Linux应用程序开发。GTK+(GIMP Toolkit)是一个强大的跨平台GUI库,而GNOME是Linux桌面环境的一个主要组成部分,它提供了许多与GTK+兼容的组件和API。 **GTK+库** GTK+是一个用...

    linux应用程序开发指南使用gtk+ gnome库+ glib

    Linux应用程序开发指南主要聚焦于使用GTK+、Gnome库以及GLib进行图形用户界面(GUI)的构建。这些工具和库在开源世界中扮演着重要角色,尤其在Linux平台上,它们为开发者提供了丰富的功能和高效的工具。 GTK+,全称...

    GTK+-2.0-中文手册.pdf.7z

    通过阅读这份 GTK+ 2.0 中文手册,开发者不仅可以学习到 GTK+ 的核心概念和技术,还能掌握开发 GUI 应用的基本流程和最佳实践,为实现高效、美观的图形界面打下坚实的基础。尽管 GTK+ 已经更新到更高版本,但 GTK+ ...

    GTK+程序设计中文版PDF

    GTK+,全称为GIMP Toolkit,是一个开源的GUI(图形用户界面)工具包,用于创建跨平台的应用程序。它最初是为图像处理软件GIMP(GNU Image Manipulation Program)开发的,但后来发展成为了一个广泛使用的多语言编程...

    gtk+ gnome 开发

    《GTK+/Gnome应用开发》一书为读者提供了深入理解GTK+和Gnome技术的全面指南,这是一本由Havoc Pennington撰写的、针对Linux环境下图形用户界面(GUI)开发的专业书籍。该书由Red Hat Advanced Development Labs出版...

    Gtk+ 3.6.4 win64.zip

    Gtk+ 3.6.4 是一个用于开发图形用户界面(GUI)的开源工具包,主要面向Linux和其他类UNIX系统,但也有针对Windows平台的版本。这个“Gtk+ 3.6.4 win64.zip”文件是一个包含了Gtk+ 3.6.4在64位Windows操作系统上的SDK...

    LINUX应用程序开发指南:使用GTK+ GNOME库_gnomegtk_

    "LINUX应用程序开发指南:使用GTK+ GNOME库"是针对这一主题的深入学习资源,主要聚焦于利用GTK+和GNOME库来构建高效、美观且功能丰富的应用。GTK+(GIMP Toolkit)是一个强大的跨平台的GUI构建工具包,而GNOME是基于...

    linux gtk+-2.0.zip

    Linux系统中的GTK+ 2.0是一个用于创建图形用户界面(GUI)的开源库,它在许多基于Linux的桌面环境中广泛使用,如GNOME。GTK+(GIMP Toolkit)最初是为了GIMP图像编辑器开发的,但随着时间的发展,它已经成为了一个...

    gtk+ gtk+-bundle_2.18.7-20100213_win32

    GTK+(GIMP Toolkit Plus)是一个跨平台的图形用户界面(GUI)工具包,广泛用于创建桌面应用程序。这个“gtk+-bundle_2.18.7-20100213_win32”是一个面向Windows操作系统的GTK+ 2.18.7版本的打包文件,发布于2010年2...

Global site tag (gtag.js) - Google Analytics