ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:32.75KB ,
资源ID:18345655      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18345655.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(大家一起用gtk编程Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

大家一起用gtk编程Word文档格式.docx

1、*Glib:包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强GTK 的可移植性,同时提供 libc 的对应函数的增强版本。*Pango:该组件用来处理国际化文字输出。 2、预备工欲xxx,必先利其器!在进行实际的程序设计之前,应该先明确一些主要的开发工具。1)GTK是跨平台的,它能够运行于Linux/Unix/Windows/MacOS及嵌入式系统,但这不是本文所关注的重点;实际上,只要按照GTK所提供的API去编程,基本上在一个平台上设计的程序,在其它平台可以不加任何修改而成功地进行编译。笔者使用的操作系统是:Dubuntu-6.06,本文中所有的示例代

2、码将在该平台上进行开发并编译运行;当然,这并不代表不能使用其它操作系统,只要安装了GCC编译环境、GTK/Glib/Libc开发库,基本上就能成功地编译运行本文中的所有示例,现就Ubuntu Dapper 发行版GTK开发环境安装方法简述如下:sudo apt-get install vim #是的,笔者使用vim来编写代码,当然您可以使用任何自己喜欢的编辑器sudo apt-get install build-essential #这将安装sudo gcc/g+/gdb/make 等基本编程工具sudo apt-get install gnome-core-devel #这将安装 libgt

3、k2.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 发行版可参考相应

4、的文档进行开发环境的搭建,各大Linux论坛是个不错的咨询地:www.linuxsir.org , www.linuxfans.org如果有热心的同仁能提供其它操作系统 GTK 开发库的安装方法,欢迎提供给我笔者,笔者将在这里分享给大家!先行谢过了。 3、Hello,Dubuntu!嗯,早就急不可待了,让我们开始我们的第一个程序吧!本程序的主要功能: 显示一个窗口,并在窗口的标题栏显示字符串Hello, Dubuntu!源代码如下所示,编译成功后,可以通过命令行输入 ./hello_dubuntu 来运行此程序,显示效果如下:hello_dubuntu.c#include/* 一般可以在 /u

5、sr/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), Hel

6、lo,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语言编译器

7、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/inc

8、lude -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_i

9、nit(&argv) 函数用于对传入进来的标准命令行参数进行解析并处理,这些标准命令行参数为(即:运行我们的程序时,通过命令行传入的下列参数会被自动处理): -gtk-module -g-fatal-warnings -gtk-debug -gtk-no-debug -gdk-debug -gdk-no-debug -display -sync -name -class4) gtk_widget_show(window) 用于告诉程序, 我们的 window 构件已经准备完成,可以显示了。5) gtk_main() ,程序将会运行到此,然后等待“事件”的发生;当有事件发生后,将调用此事件对应的

10、回调函数,当回调函数执行完毕,又会重新回到 gtk_main() ,等待新的“事件”发生。6) 宏 GTK_WINDOW(window) 是用于进行类型检查及转换,它将把一个可以转化为 GtkWindow 的构件强制转换为GtkWindow 类型后传递给函数。好了,hello_dubuntu.c 理解了吗? 什么!没有理解! 不要紧,我们下边还会有很多这样的小例子,再多输入几个就会理解了,相信我!下集预告:将在窗口中添加一个按钮,并为按钮关联clicked事件,以使单击按钮后会有一些返回。大家一起用gtk编程2(添加按钮和连接事件) 4、加入按钮和事件处理函数上回说道,咱们使用GTK创建了一个

11、最简单的GTK程序,简单到只能显示一个200x200点大小的空白窗口,并在标题栏显示“Hello,Dubuntu!”的字样! 虽然简单,但确实是个不错的开端,好了,咱们现在在窗口中添加一个按钮。运行效果:代码:hello_dubuntu2.c/* 本例的主要目的是在窗口中显示一个按钮,* 并且单击按钮退出程序voidcb_button(GtkWidget *widget, gpointer data)/ 按钮button的回调函数 gtk_main_quit();int GtkWidget *main_window; /主窗口对象 GtkWidget *button; /将要放置到主窗口中的按

12、钮对象 main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(main_window), Hello,Dubuntu2! /设置窗口的默认大小(宽200,高度50) gtk_window_set_default_size(GTK_WINDOW(main_window), 200,50); button = gtk_button_new_with_label(退出程序 gtk_container_add(GTK_CONTAINER(main_window), button); /为连接

13、“单击事件”要调用的回调函数g_signal_connect(G_OBJECT(button),G_CALLBACK(cb_button),NULL); gtk_widget_show(button); gtk_widget_show(main_window); /上边的两句可以合为 gtk_widget_show_all(window)编译: gcc -o hello_dubuntu2 hello_dubuntu2.c pkg-config -cflags -libs gtk+-2.0程序注释:1)在GTK中,默认添加到窗口中的控件会自动占满所有的空间,因此当我们的程序运行时,将窗口放大时按

14、钮也跟着放大了;这点同Windows及Qt是不相同的。正因为如此,在GTK控件库中有几个控件专门用来进行窗口布局,比如说vbox, hbox, table, GtkPixed 等, 通过对它们的灵活操作,可以得到一个非常漂亮的应用程序界面!这将在以后进行详细介绍。2)关于事件与回调函数事件:GTK同许多其它的图形编程库相似,都采用事件驱动方式来工作,这就关系到出现什么事件做什么工作的问题。(在GTK中还有个“信号”的概念,同“事件”的概念不容易分清楚,特别是刚开始学习时,不过没关系,初期我们就把它们当一个概念来理解),在GTK2.0中,一般使用 g_signal_connect() 函数来注册

15、每个对象和其对应的处理函数,如本例所示。回调函数:实际上就是一个普通的函数,不过它并不会被显示地直接调用,而是把它的地址注册到另一个函数,在那个函数中间接地对它进行调用,这也是回调的由来。3)在本例中,我们通过下列语句为“button”注册了一个事件的回调函数“cb_button,前缀”cb“即”call back(回调)”的意思。g_signal_connect(G_OBJECT(button), , G_CALLBACK(cb_button),NULL); 由于注册了上边的回调函数,因此当我们用鼠标单击按钮时,就会激发按钮的“clicked”事件,因此会调用 cb_button() 函数,

16、而此函数中的语句 gtk_main_quit() 的作用是退出程序,因此我们单击按钮后整个程序就会退出。4)当然,这个程序还有个小“bug”,即直接单击右上角的“关闭按钮”关闭程序后,虽然主窗口消失了,但程序并没有直接地退出,还驻留在内存中。 这是因为当单击右上角的“关闭按钮”关闭程序后,会产生“destroy”信号,而我们并没有为此信号使用 g_signal_connect() 函数注册相关的处理函数,因此它的行为并不是我们所期望的;解决方法就是为主窗口的”destroy信号注册一个回调函数,并在此回调函数中调用 gtk_main_quit() 以便退出程序,将如下代码添加到hello_du

17、buntu2.c 的 gtk_main() 函数调用的上边就行:g_signal_connect(G_OBJECT(main_window), destroy请注意:在这里我们再一次使用了 cb_button“函数,这是因为它的行为正是我们想要的,即”调用此回调函数后, 退出程序“。好了,今天的内容差不多了,很多内容都没有深入研究,不过没关系,慢慢来,以后将要以专题的形式对GTK的每个部件及API进行深入并细致的说明。如果您对本例中的一些概念没有完全理解也没有关系,继续下一步,很容易理解的!千万不要呆在原地不动。下回预告:将简要说明如何编写简单的 Makefile 文件来组织我们的源程序,另外

18、还将介绍如何利用 gdb 对我们的程序进行调试!精彩不容错过。附:添加”destroy“信号处理后的 hello_dubuntu2.chello_dubuntu2.c g_signal_connect(G_OBJECT(button), g_signal_connect(G_OBJECT(main_window), 大家一起用gtk编程3(初步使用Makefile) 5、初步使用Makefile上回说道,咱们使用GTK创建了一个能够截获事件的GTK程序,本节将简单地介绍一下如何使用Makefile来组织我们的源程序,使用Makefile是基于如下几个原因: 能实现从无限简单到无穷复杂的软件工程

19、组织 能方便地与众多的Linux命令与实用程序集成,当然也包括Vim与emacs 还有很多,就留给读者自己探索吧.笔者在这里介绍Makefile的主要目的是想让大家知道Linux下有这样一个工具,使用它确实很方便,并且希望大家在有需要的时候能够想到它。总的来说,Makefile是使用一系列的依赖关系和时间值,来决定是否对一个目标进行重构建;不废话了,来看看我们的Makefile文件长什么样:Makefile 注意:Makefile 文件如果从网页上直接拷贝,往往不能成功正常使用,请从下边的附件中下载可用的文件。CC=gccPROG_NAME=hello_dubuntu2INCS=SRCS=he

20、llo_dubuntu2.c#从xx.c 文件得到 xx.o 文件OBJS=$SRCS:.c=.o#编译GTK程序时要用到的库LIBS=gtk+-2.0#- 用户修改区域 结束# -O2CFLAGS=pkg-config -cflags $LIBS -g -WallLDFLAGS=pkg-config -libs $LIBS -g -Wallall: $PROG_NAME$PROG_NAME:$OBJS $CC -o $PROG_NAME $OBJS $LDFLAGS#注意:上边”$CC 的前边有一个TAB键,而不是空格#如果有头文件进行修改,则自动编译源文件$OBJS:$INCS.c.o:

21、$CC -c $ $CFLAGSclean: rm -f *.orebuild: clean all将此Makefile文件与上一节的 hello_dubuntu2.c 文件放在同一个文件夹下,然后运行如下命令即可编译出 hello_dubuntu2 可执行文件:make 1)刚开始的几行定义了几个变量,比如用CC来代替真正的 gcc 编译器,这样当想换别的编译器来编译我们的程序时直接改变CC变量的值就OK了。其它的: CC 指代用来编译程序的编译器,这里使用 gcc RPOG_NAME 指代最终要生成的可执行文件名,需手工填入 INCS 指代工程文件中所自定义的所有头文件,需手工填入 SRC

22、S 指代所有使用到的源文件,需手工填入 OBJS 是通过 .c 文件得到的 .o 文件,因为每个 .c 文件都将编译生成一个对应的 .o 文件,自动生成 LIBS 用来指代编译GTK程序时需要使用到的GTK相关库,一般使用默认的 gtk+-2.0 即可,需手工填入 CFLAGS 用来指代编译程序时使用到的一些编译选项, -g 表示生成调试信息以供GDB使用,-Wall表示生成编译时的警告信息(W表示Warning,all 表示全部) LDFLAGS 用来指代进行程序连接时使用到的一些选项以上这些变量,将在Makefile的剩余部分使用 $xxx 的形式进行引用。2)关于“目标”:“依赖关系”从“all: $PROG_NAME”这一句开始,Makefile就开始使用 目标:依赖 的关系来处理真正的程序编译了;而它们下边以 TAB 键开始的行就是满足依赖关系后要运行的程序(注意:是TAB键,不是空格)。具体笔者就不详细描述了,有兴趣的读者可以参考下边推荐的教程。3)关于 “.c.o:” 语句:这句话的意思就是说,当遇到一个 .c 文件,那么使用它下边的命令“ $CFLAGS” 将 .c 文件编译为 .o 文件;命令中 $ 用来代替对应的 .c 文件的文件名。4)关于clean 和 rebuild:这两个者伪目标,必须使用 make clean 或 mak

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1