您好,欢迎访问三七文档
GTK+2.0教程译者:huzheng,konghui,ferry,carton,yang_yi,ddd,tingle版本号:V_0.1.0 2002年6月25日本文是有关通过C语言接口使用GTK(theGIMPToolkit)的教程。TableofContents中文版说明简介从这里开始用GTK来写HelloWorld编译HelloWorld程序信号和回调函数的原理事件HelloWorld详解继续数据类型深入探索信号处理函数改进了的HelloWorld组装构件组装盒的原理盒的细节组装示范程序用表组装表组装示例构件概述类型转换构件的组织无窗口构件按钮构件一般按钮NormalButtons开关按钮ToggleButtons复选按钮CheckButtons单选按钮RadioButtons调整对象Adjustments创建一个调整对象轻松使用调整对象“调整对象”的内部机制范围构件RangeWidgets滚动条构件ScrollbarWidgets比例构件ScaleWidgets创建一个比例构件函数和信号(至少讲了函数)常用的范围函数设置更新方式获得和设置调整对象键盘和鼠标绑定示例杂项构件标签Labels箭头Arrows工具提示对象TheTooltipsObject进度条ProgressBars对话框Dialogs标尺Rulers状态栏Statusbars文本输入构件TextEntries微调按钮SpinButtons组合框ComboBox日历Calendar颜色选择ColorSelection文件选择FileSelections容器构件ContainerWidgets事件盒TheEventBox对齐构件TheAlignmentwidget固定容器FixedContainer布局容器LayoutContainer框架Frames比例框架AspectFrames分栏窗口构件PanedWindowWidgets视角Viewports滚动窗口ScrolledWindows按钮盒ButtonBoxes工具栏Toolbar笔记本Notebooks菜单构件手工创建菜单手工菜单示例使用套件套件示例无文档构件快捷标签AccelLabel选项菜单OptionMenu菜单项MenuItems复选菜单项CheckMenuItem单选菜单项RadioMenuItem分隔菜单项SeparatorMenuItem分离菜单项TearoffMenuItem曲线图Curves绘图区DrawingArea字体选择对话框FontSelectionDialog1/258消息对话框MessageDialogGamma曲线图图像Image插头和插座PlugsandSockets树视区TreeView文本视区TextView设置构件的属性超时、IO和Idle函数超时Timeouts监控IOIdle函数高级事件和信号处理信号函数连接和断开信号处理函数阻塞和反阻塞信号处理函数发出和停止信号信号的发射和传播操作选中区概述获取选中区信息提供选中区拖放概述属性函数设置源构件源构件上的信号设置目的构件目的构件上的信号GLib定义双向链表单向链表存储管理计时器字符串处理实用程序和错误处理函数GTK的rc文件rc文件的功能GTKrc文件的格式rc文件示例编写你自己的构件概述一个构件的剖析创建一个复合构件介绍选择一个父类头文件_get_type()函数_class_init()函数_init()函数其余的...从头创建构件介绍在屏幕上显示构件表盘构件的原形主体gtk_dial_realize()大小磋商gtk_dial_expose()事件处理可能的增强深入的学习涂鸦板,一个简单的绘图程序概述事件处理绘图区构件和绘图添加XInput支持允许扩展设备信息使用扩展设备信息得到更多关于设备的信息进一步的讲解编写GTK应用程序的技巧投稿鸣谢教程的版权和许可声明GTK信号GtkObjectGtkWidgetGtkDataGtkContainerGtkCalendarGtkEditableGtkNotebookGtkListGtkMenuShellGtkToolbarGtkButtonGtkItemGtkWindowGtkHandleBoxGtkToggleButtonGtkMenuItemGtkCheckMenuItemGtkInputDialogGtkColorSelectionGtkStatusBarGtkCurve2/258GtkAdjustmentGDK事件类型示例程序代码Tictactoetictactoe.htictactoe.cttt_test.cGtkDialgtkdial.hgtkdial.cdial_test.cScribblescribble-simple.cscribble-xinput.c术语表简介GTK(GIMPToolkit)是一套用于创建图形用户界面的工具包。它遵循LGPL许可证,所以你可以用它来开发开源软件、自由软件,甚至是封闭源代码的商业软件,而不用花费任何钱来购买许可证和使用权。GTK被称为GIMP工具包是因为最初写它是用来开发GIMP(GNU图像处理程序)的,但是它现在已经被用于很多软件项目了,包括GNOME(GNU网络对象模型环境)。GTK是在GDK(GIMPDrawingKit)和gdk-pixbuf的基础上建立起来的,GDK基本上是对访问窗口的底层函数(在X窗口系统中是Xlib)的一层封装,gdk-pixbuf是一个用于客户端图像处理的库。GTK的创建者是:•PeterMattispetm@xcf.berkeley.edu•SpencerKimballspencer@xcf.berkeley.edu•JoshMacDonaldjmacd@xcf.berkeley.eduGTK的当前维护者是:•OwenTaylorotaylor@redhat.com•TimJaniktimj@gtk.orgGTK实质上是一个面向对象的应用程序接口(API)。尽管完全用C写成的,但它是基于类和回调函数(指向函数的指针)的思想实现的。还有一个名为GLib的第三个组件,包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强GTK的可移植性,因为它们所实现的一些函数在其它Unix系统上未实现或不符合标准,比如g_strerror()。一些是对libc的对应函数的增强,比如g_malloc()具有增强的调试功能。在2.0版中,GLib又加入这样一些新内容:构成GTK类层次基础的类型系统(typesystem),在GTK中广泛使用的信号系统,对各种不同平台的线程API进行抽象而得的一个线程API,以及一个加载模块的工具。作为最后一个组件,GTK使用了Pango库来处理国际化文字输出。本教程讲述GTK的C接口。还有许多其它语言的GTK绑定如C++、Perl、Python、TOM、Ada95、ObjectiveC、FreePascal、Eiffel、Java和C#。如果你想使用GTK其它语言的绑定,请先查看该绑定的文档。有时这些文档会讲一些重要的概念,然后你再来参考本教程。还有一些跨平台的API(如wxWindows和V),它们把GTK作为一个支持的平台。同样,先参考它们的文档。如果你用C++来开发GTK应用程序,有以下几点需要注意。已有一个GTK的C++绑定叫做GTK--(译者注:现在叫做gtkmm),提供一个更符合C++规范的接口,你可以先看看这个接口。如果你由于种种原因不喜欢这种方法,还有另外两种使用GTK的方法。首先,你可以只使用C++中的C子集来调用GTK,这样就可以使用本教程描述的C接口。其次,你可以用下述方法同时使用GTK和C++:把所用的回调函数定义为C++类中的静态成员函数,然后仍然使用C接口来调用GTK。如果你选择后一种方法,你可以把指向要操作的对象3/258的指针(即所谓的this)作为回调函数的data参数。选择哪一种方法仅仅是个人的喜好问题,因为不管用哪一种方法,你都会得到C++和GTK。它们都不需要特殊的预处理程序,因此你可以同时使用标准C++和GTK。本教程试图尽可能详细地描述GTK,但是肯定不能面面俱到。本教程假设你能够较好的理解C语言,并且了解怎样编写一个C程序。有X编程经验会很有帮助,但不是必要条件。如果GTK是你学习的第一个构件工具包,请告诉我们你怎样找到这个教程,以及学习时有什么困难。还有其它一些语言的绑定,如C++、ObjectiveC、ADA、Guile等,但我不了解这些。本教程仍在不断完善中。请到查看更新情况。我非常乐意听到你在使用本教程学习GTK时遇到的各种困难,并欢迎对怎样改进此文档提出建议。更多信息请参阅投稿这一章。从这里开始你首先做的第一件事,当然是下载GTK源程序,并安装它。你总是能从ftp.gtk.org得到最新版本。你也可以在上查看其它GTK源程序的信息。GTK使用GNUautoconf配置。解压缩后,输入./configure--help查看选项列表GTK源码发布包中包含教程中所有示例的代码,每个示例中包含有Makefiles文件,用以方便编译。一开始介绍GTK,我们会尽可能从简单的程序开始。这个程序创建200x200大小的窗口,没有办法退出,除非你从shell中将它杀掉。#includegtk/gtk.hintmain(intargc,char*argv[]){GtkWidget*window;gtk_init(&argc,&argv);window=gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_widget_show(window);gtk_main();return0;}你可以用gcc编译上面的程序:gccbase.c-obase`pkg-config--cflags--libsgtk+-2.0`4/258不常用的编译参数在下面编译HelloWorld程序中解释。所有程序应该包含gtk/gtk.h,其中声明了变量、函数以及数据结构等,这些东西会在你的程序中使用。下一行:gtk_init(&argc,&argv);这个函数gtk_init(gint*argc,gchar***argv)会在每个GTK应用程序中调用。该函数设定了默认的视频(visual)和颜色映射模式(colormap),接着会调用函数gdk_init(gint*argc,gchar***argv)。该函数初始化要使用的库,设定默认的信号处理,并检查传递给你的程序的命令行参数,寻找下列之一:•--gtk-module•--g-fatal-warnings•--gtk-debug•--gtk-no-debug•--gdk-debug•--gdk-no-debug•--display•--sync•--name•--class这些参数将会从参数表中删除,留下它不能识别的给你的程序解析或忽略。这就创建了可以被所有GTK程序接受的一组标准参数。下面两行程序会创建并显示一个窗口window=gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_widget_show(window);GTK_WINDOW_TOPLEVEL参数指我们要使用窗口管理器来修饰和放置窗口。这里不会创建一个0x0大小的窗口,一个没有子构件的窗口默认大小设置为200x200,这样你仍然能操作它。gtk_widget_show()函数让GTK知道,我们已经设置完构件的属性,可以显示它了。最后一行进入GTK主处理循环。gtk_main();gtk_main()是另一个可以在每个GTK程序中见到的函数调用。当程序运行到这里,GTK会“睡着”等待X事件(如按钮或键盘按下)、超时(timeouts)或文件IO通知发生。在我们的示例中,事件被忽略。用GTK来写HelloWorld好,现在来写一个只有一个按钮构件的程序,这是一个标准的
本文标题:GTK2-入门教程
链接地址:https://www.777doc.com/doc-5937068 .html