gtk+程序设计概述

1 概述

  1. gtk+编程和 Java 编程相同,首先构建一个界面,然后程序进入消息循环。当窗口等构件上有事件产生时,该事件会被窗口管理器捕获,如果程序注册了该事件的处理函数,则使用该处理函数来处理事件,否则使用窗口处理管理奇的默认处理函数来处理该事件
  2. gtk+ 编程中,以 g_ 开头的函数和以 g 开头的变量为在 glib 函数库中定义的函数和变量。以 gtk_ 开头的函数和以 Gtk 开头的变量为在 gtk+ 函数库中定义的函数和变量。
  3. main函数返回0表示程序正常结束
  4. gtk+ 编程中函数的命名使用“ _ ”来分隔
    gtk+ 中的各种构件有一个层次结构,新的构件一般在原来构件的基础上添加了某些功能后得到的。 gtk+ 的层次结构如下图所示:

相关头文件

  1. 头文件 gtk/gtk.h 中包含了 gtk +库中的所有头文件,也包含了 gdk.h 和 glib.h
  2. 头文件 gnome.h 中包含了 gtk.h ,要用到 GNOME 库中的构件和库函数,包含 gnome.h 就可以了

2 程序的初始化与消息循环

  1. gtk_init :在进行 gtk +编程时必须先使用该函数来对 gtk 函数库进行初始化,它还能够自动分析命令行参数,并根据命令行参数来初始化应用程序。注意:此处的命令行参数为 gtk+ 中预定义的值,如果不是,则给出出错信息。比如:在程序中使用 --display 参数可以用来指示要使用的 X display
  2. gtk_exit:退出GTK+应用程序并回收所有GTK+资源所占的空间
  3. g_print 函数用来在标准输出中输出数据,它一般在调试时使用

3 GTK+主循环

3.1 主循环基本知识

  1. gtk_main函数运行GTK+主循环(相当于 Window 程序中的消息循环),直到调用gtk_main_quit函数,gtk_main才会退出。gtk_main函数可以递归调用,每次调用一个gtk_main_quit函数就退出gtk_main函数的一个实例
  2. gtk_main_quit用来退出最里层的gtk_main主循环
  3. 由于GTK+程序中只有一条执行线索,因此事件处理函数中的代码都是在gtk_main函数中执行的。如果在事件处理函数中又调用了gtk_main,则称为gtk_main的递归调用
  4. gtk_main_level返回递归的层次。如果没有gtk_main运行时,返回0,如果一个gtk_main函数在运行,则返回1
  5. gtk_main_iteration:该函数是gtk_main函数的一次迭代,它在处理完一个事件后返回(gtk_main函数只有在调用gtk_main_quit后才返回,否则将阻塞等待,以处理下一个事件)。gtk_main_iteration通常与gtk_event_pending合在一起使用。
  6. gtk_events_pending:在有事件到达时返回

3.2 退出函数

    退出函数就是当调用gtk_main_quit函数时要调用的回调函数。退出函数的原型为:
        gint (*GtkFunction)(gpointer data)
    当退出函数返回FALSE时,该退出函数被调用一次后将被系统自动删除,此后再次调用gtk_main_quit函数将不会再调用退出函数。例题:退出函数

    可以为一个gtk_main主循环添加多个退出函数,这些退出函数的调用顺序与它们被添加的顺序相反。当某个退出函数返回FALSE而另一个退出函数返回TRUE时,在第二次调用gtk_main_quit时,只有返回TRUE的退出函数被调用

  1. gtk_quit_add用来给某个主循环添加退出函数,添加时必须指定主循环的级别
  2. gtk_quit_remove使用gtk_quit_add的返回值来从主循环中删除一个回调函数
  3. gtk_quit_remove_by_data使用传递给回调函数的数据来从主循环中删除回调函数

4 定时器

  1. gtk_timeout_add函数用来往程序中添加一个定时器,并返回此定时器的ID
  2. gtk_timeout_remove则根据定时器的ID来删除一个定时器
  3. 现在一般使用g_timeout_add系列的函数来代替gtk_timeout_add系列的函数

    定期调用的回调函数的原型为:
    gint timeout_callback(gpointer data)
    当该回调函数返回FALSE时,定时器将在调用一次该函数后被删除。如果要让定时器一直起作用,则必须让定期调用的回调函数返回TRUE

5 idle函数

    idle函数只有在主循环中没有事件要被处理时才会被运行,且如果idle函数的返回值为FALSE,idle函数将在被调用一次后被删除。如果要让idle函数一直起作用,则必须让它返回TRUE

  1. gtk_idle_add函数用来往程序中添加一个idle函数
  2. gtk_idle_remove根据idle函数的ID来删除idle函数
  3. gtk_idle_remove_by_data根据传递给idle函数的参数来删除idle函数

6 使用文件描述符进行输入输出

  1. gtk_input_add函数用来往GTK+程序中添加一个文件描述符,当该文件描述符读、写或发生异常时调用指定的回调函数。该函数返回一个ID号用来在删除文件描述符时使用
  2. gtk_input_remove函数使用gtk_input_add函数的返回值来删除一个输入函数

    输入回调函数的原型为:void(*DdkInputFunction)(gpointer data,gint_source,GdkInputCondition condition),其中condition的取值可以是:

  1. GDK_INPUT_READ     当文件描述符读就绪时调用回调函数
  2. GDK_INPUT_WRITE    当文件描述符写就绪时调用回调函数
  3. GDK_INPUT_EXECPTION 当文件描述符上有异常产生时调用回调函数。注意:只有在TCP发送紧急数据时的套接字描述符上才产生异常

7 编译应用程序

    使用autoconf和automake工具的目的是创建一个能在用户环境使用的,可移植的shell脚本和Makefile文件。autoconf实际上是一个工具集,用来生成可移植的shell脚本--configure。configure脚本用来探查编译系统,生成Makefile文件和一个特殊的头文件config.h。使用configure生成的Makefile文件来编译程序能够使程序适应用户系统的特定环境。configure脚本从一个称为makefile.in的模版文件生成Makefile文件。automake由一个手写的makefile.am生成Makefile.in文件。Makefile.in文件随源代码一块发布,当用户运行configure时使用它来生成Makefile文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GTK程序设计GTK programming)是一种使用GTKGTK+,即The GIMP Toolkit)进行界面设计和开发的方法。GTK是一个开源、跨平台的图形用户界面工具包,它提供了丰富的界面组件和函数库,使开发者能够快速、灵活地创建功能强大的应用程序。 GTK程序设计可以应用于多种操作系统,例如Linux、Windows和macOS等。它支持多种编程语言,包括C、C++、Python等,开发者可以根据自己的偏好选择适合自己的编程语言。 对于想要学习GTK程序设计的人来说,可以参考一些相关的学习资源,比如官方文档(GTK官方网站提供了详细的文档)、教程和书籍等。这些资源可以帮助开发者了解GTK的基本原理、组件的使用方法以及开发实践经验等。 对于开发GTK程序的步骤,一般包括以下几个方面: 1. 界面设计:使用GTK提供的组件和布局方式设计应用程序的用户界面,包括窗口、按钮、文本框等。 2. 事件处理:通过连接信号和回调函数来处理用户操作事件,例如点击按钮、输入文本等。 3. 业务逻辑:根据应用程序的需求,编写相应的业务逻辑代码,实现功能的实际操作。 4. 编译和运行:使用相应的编译器进行编译,然后运行程序进行测试和调试。 总结来说,GTK程序设计是一种使用GTK工具包进行程序界面设计和开发的方法。通过学习GTK的相关知识和技术,开发者可以创建出功能丰富、界面美观的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值