大家一起用gtk编程1(开始与热身)(转载部分gtk文章)

在这里先感谢作者了。
^^

大家一起用gtk编程1(开始与热身)


转载请注明出处: http://lvjinhua.cublog.cn
作者:lvjinhua at gmail dot com
2006.09.20
  • 写在最前面
笔者写做本文的目的,主要是为初学GTK编程的新手们提供一个能够快速上手的学习档案,能够通过自己将所有的代码输入并编译,以达到学习的目的。同时,也希望它成为一个参考手册,希望GTK中的每一个API都能在本文中找到相应的示例。

笔者将尽力保证所有的代码都是最短小的,这样才能保证大家都有足够的动力去手工输入它。

由于笔者时间及精力有限,不能一次将所有内容呈现给所有读者,因此拟定了一个计划:每天更新一个章节的内容,在笔者的Blog上进行连载,同时会不断地对以前的内容进行修改和完善,因此为了保证大家能够读到最新的内容,请随时关注笔者的Blog:
http://lvjinhua.cublog.cn

起笔的日子:2006.09.20
  • 为什么是GTK?
为什么不是GTK?笔者不想花费太多的口水去辨证为什么选择GTK而不是其它的东西;任何技术都没有好坏之分,只有使用它的人有能力的强弱之别;笔者认为比较明智的做法是:多编些程序,少做些争论。

  • 1、GTK简介
GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许可证,所以可以用它来开发开源软件、自由软件,甚至是封闭源代码的商业软件,而不用花费任何费用来购买许可证和使用权。当前,GTK已经被成功地应用到 了大量的自由软件及商业软件中,已经取得了很大的成功。

GTK 的创建者:
    Peter Mattis: petm@xcf.berkeley.edu
    Spencer Kimball: spencer@xcf.berkeley.edu
    Josh MacDonald: jmacd@xcf.berkeley.edu

当前,GTK主要由几大组件构成:
*Gtk+:GTK的主要构件,包括所有的图形控件及大量实用的API。
*Glib:包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强GTK 的可移植性,同时提供 libc 的对应函数的增强版本。
*Pango:该组件用来处理国际化文字输出。

  • 2、预备
工欲xxx,必先利其器!在进行实际的程序设计之前,应该先明确一些主要的开发工具。
1)GTK是跨平台的,它能够运行于Linux/Unix/Windows/MacOS及嵌入式系统,但这不是本文所关注的重点;实际上,只要按照GTK所提供的API去编程,基本上在一个平台上设计的程序,在其它平台可以不加任何修改而成功地进行编译。

笔者使用的操作系统是: Dubuntu-6.06, 本文中所有的示例代码将在该平台上进行开发并编译运行;当然,这并不代表不能使用其它操作系统,只要安装了GCC编译环境、GTK/Glib/Libc开 发库,基本上就能成功地编译运行本文中的所有示例,现就Ubuntu Dapper 发行版GTK开发环境安装方法简述如下:
sudo apt-get install vim                        #是的,笔者使用vim来编写代码,当然您可以使用任何自己喜欢的编辑器
sudo apt-get install build-essential       #这将安装
gcc/g++/gdb/make 等基本编程工具
sudo apt-get install gnome-core-devel  #这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件
sudo apt-get install pkg-config            #用于在编译GTK程序时自动找出头文件及库文件位置
sudo apt-get install devhelp                 #这将安装 devhelp GTK文档查看程序
sudo apt-get install libglib2.0-doc libgtk2.0-doc
                                                    #这将安装 gtk/glib 的API参考手册及其它帮助文档
sudo apt-get instal glade libglade2-dev #这将安装基于GTK的界面构造程序

当然,其它的 Linux 发行版可参考相应的文档进行开发环境的搭建,各大Linux论坛是个不错的咨询地: www.linuxsir.org , www.linuxfans.org

如果有热心的同仁能提供其它操作系统 GTK 开发库的安装方法,欢迎提供给我笔者,笔者将在这里分享给大家!先行谢过了。
Windows 平台以MinGW为例的环境设置:

来自
linxh 的Blog
 
 
  • glib-2.12.1.zip. Runtime for GLib 2.12.1. Requires libiconv and gettext.

  • glib-dev-2.12.1.zip. Corresponding developer package, i.e. headers, import libraries and documentation.

 

  • pkg-config-0.20.zip. Pkg-config is a neat program that is useful in makefiles etc and extensively used in building software according to the GTK+ and GNOME conventions, using autotools etc. It uses a "database" specifying interdependencies among softawre packages. It is used to get the compile and link flags needed when building software using libraries that provide pkg-config data. Requires GLib 2.x.

  • GNU libiconv for Win32. Both runtime and developer files. GNU Libiconv is an implementation of iconv. GLib uses libiconv, so you will need this.

  • gettext-0.14.5.zip. Just the GNU libintl (internationalization library) DLL (intl.dll). GLib uses libintl, so you will need this.

  • gettext-dev-0.14.5.zip. GNU gettext deveoper files and tools for Win32, containing the header libintl.h, msgfmt.exe, other programs, documentation, and various other files. libintl.h is needed if you build software that uses GNU gettext for internationalization. Msgfmt is needed if you want to recompile message catalogs. The other commands can be used to manipulate message catalogs in other ways.

    解压到一个目录下(以c:/gtk为例)。
     
    2. 从 http://gnuwin32.sourceforge.net/packages/libpng.htm 下载libpng,安装至c:/gtk下。
     
    3. 编译:
    (1) 设置环境变量 set PKG_CONFIG_PATH=C:/gtk/lib/pkgconfig
    (2) 运行 pkg-config --cflags  --libs gtk+-win32-2.0
    (3)  编译时加上上面的输出作为参数

  • 3、Hello,Dubuntu!
嗯,早就急不可待了,让我们开始我们的第一个程序吧!

本程序的主要功能: 显示一个窗口,并在窗口的标题栏显示字符串"Hello, Dubuntu!"
源代码如下所示,编译成功后,可以通过命令行输入 ./hello_dubuntu 来运行此程序,显示效果如下:


hello_dubuntu.c 
#include<gtk/gtk.h>
/* 一般可以在 /usr/include/gtk-2.0 下找到上边的头文件
 * 上边的头文件的作用是包含进行GTK编程所有可能用到的头
 * 文件,包括glib.h等
 */
int
main(int argc, char *argv[])
{
        GtkWidget *window;
        // GtkWidget 是绝大部分可视组件的的基类
        gtk_init(&argc, &argv);
        //对程序传入的命令行参数进行标准化处理
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        //创建窗口(200x200大小)
        gtk_window_set_title(GTK_WINDOW(window), "Hello,Dubuntu!");
        //设置窗口标题
        gtk_widget_show(window);
        //显示窗口
        gtk_main();
        //Gtk程序主循环
        return 0;
编译程序: gcc hello_dubuntu.c -o hello_dubuntu `pkg-config --cflags --libs gtk+-2.0`  # 注意:"`" 不是普通的单引号 "'",而是同"~"在一起的那个符号!

是的,上边的程序非常简单,除了注释就没几条语句了!但它确实是一个GTK程序,虽然它还不够完善,缺少信号处理,因此当您单击“关闭”按钮关闭此窗口后,实际上程序还在运行。

1) 编译程序的命令行:
如上,使用GNU C语言编译器 gcc , 其中 pkg-config --cflags --libs gtk+-2.0 用于生成 gcc 编译及链接程序时所必须的头文件及库文件列表,在笔者的机器上运行该命令得到的结果如下:
命令: pkg-config --cflags --libs gtk+-2.0
输出:
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXext -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXfixes -lpango-1.0 -lcairo -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0

2) 大家如果对某个GTK标准API定义,或者某个类型/常量定义不清楚,可以在 devhelp 帮助程序中进行搜索,以查看某参数说明。

3) gtk_init(&argc, &argv) 函数用于对传入进来的标准命令行参数进行解析并处理,这些标准命令行参数为(即:运行我们的程序时,通过命令行传入的下列参数会被自动处理):
  • --gtk-module
  • --g-fatal-warnings
  • --gtk-debug
  • --gtk-no-debug
  • --gdk-debug
  • --gdk-no-debug
  • --display
  • --sync
  • --name
  • --class
4) gtk_widget_show(window) 用于告诉程序, 我们的 window 构件已经准备完成,可以显示了。
5) gtk_main() ,程序将会运行到此,然后等待“事件”的发生;当有事件发生后,将调用此事件对应的回调函数,当回调函数执行完毕,又会重新回到 gtk_main() ,等待新的“事件”发生。
6) 宏 GTK_WINDOW(window) 是用于进行类型检查及转换,它将把一个可以转化为 GtkWindow 的构件强制转换为GtkWindow 类型后传递给函数。

好了,hello_dubuntu.c 理解了吗? 什么!没有理解! 不要紧,我们下边还会有很多这样的小例子,再多输入几个就会理解了,相信我!

下集预告:将在窗口中添加一个按钮,并为按钮关联"clicked"事件,以使单击按钮后会有一些返回。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值