◆C语言函数库简介系列◆1.1 GTK+
c语言吧
全部回复
仅看楼主
level 9
assiss 楼主
1 C与GUI用C写GUI似乎是一件非常痛苦的事情。比如WIN32 SDK,比如XLIB……我初学编程时,为了找一个合适的GUI库--既强大又比较简单,花费了不知多少时间。初见GTK+,就在我苦苦查找GUI库的时候。但那个时候的GTK+让我难以理解,或者说,那个时候的我还不能理解GTK+,轻而易举地放弃了这个优秀的GUI库。众里寻她千百度。找不到。我于是认为,和其他人一样认为,用C写GUI是费力不讨好的事情。于是我转向C++,转向JAVA,转向PYTHON。MFC,FLTK,FOX,WXWINDOWS->WXWIDGETS,QT,SWT,SWING,TCL/TK……天知道我试了多少种GUI库。蓦然回首,那人却在,灯火阑珊处。在寻找的过程中,我慢慢领会到了C语言的真正力量所在。在学习了大量开源库代码之后,我慢慢了解到一个不被常人所了解的世界。就在我眼界渐开的时候,我又遇到了GTK+,这一回,我终于看到了她的美丽,看到了她的魅力。1.1 GUI王国的一朵奇葩,一枝独秀的GTK+GTK+也许不是最优秀的GUI库,但必然是最好的库之一;作为钟情C语言的人来说,除了GTK+,你再也找不到更好的了。这是宿命,还是无可奈何?不必感到悲哀,不必再去东挑西选,GTK+绝对对得起“最好”这两个字。来,一起领略GTK+的风采吧。以下内容,除了废话,有用的部分主要翻译自GTK+ FAQ。什么是GTK+?要说GTK+,首先得说GUI,即graphical user interface,图形用户界面。GUI的好处不用我多说了,学C/C++的刚开始总是羡慕学VB和DELPHI的,因为他们总是能轻而易举地建立一个GUI程序。其实不用羡慕,等你学到了C/C++的精髓之后,想做一个有用的GUI程序,不比他们慢;相反,由于有了坚实的基础,你还能做得比他们好。GTK+就是这样一种帮你创建GUI的工具。它跨平台。它支撑起一个庞大的桌面系统-GNOME。它自由,免费,LGPL的授权比GPL更宽松,更适合各种用途。它被多种语言支持。C++,PYTHON,JAVA(没错),还有很多很多。它有著名的GLADE,设计GUI不比那些所见即所得的工具烦。它有大量的WIDGET,很多很多,通常情况下你不需要再写新的。它的WIDGET可以继承--是的,你没看错,用C实现的继承。就算你需要写新的WIDGET,也是小事一桩,不比C++困难。它的设计思想是面向对象的。C语言的特性决定了它不可能是真正的面向对象,但你仔细看看GTK+,除了需要你进行一些保护,它和真正的面向对象又有什么大的区别?它实现了大量有用的函数,在GLIB里。这里有数据结构--你不需要再去写链表,无论是单身的还是双向的;你不需要再羡慕C++的HASH,GLIB也有;这里有线程,这里有IO,……废话少说,让我们见识一下著名的HELLO WORLD FOR GTK+!1.1.1 安装GTK+LINUX/UNIX的用户就不需要我多说了,只是要注意安装开发版的,并且安装LIBGLADE。我们的HELLO WORLD就是从LIBGLADE开始的。WINDOWS的用户安装GTK+有些麻烦,首先,98和ME的用户可能只能安装2.4版的,2000以上的可以安装最新版。建议有条件的安装LINUX/UNIX,没条件的也安装2000/XP,不要再用98和ME了。下面我主要介绍一下WINDOWS+MINGW+GTK+的安装方法。1.1.2 下载GLADE/GTK+ FOR WINDOWS 开发版有热心的网友制作了GTK+ FOR WINDOWS,当然有很多版本,我推荐安装下面网址的:http://gladewin32.sourceforge.net/modules/news/目前上述网址的最新版是2.8.14给一个直接的下载地址:http://gladewin32.sourceforge.net/modules/wfdownloads/visit.php?lid=99这个版本集中了GLADE/GTK+,并且还有OPENGL的插件,并且集成了开发文档,比较全面。1.1.3 安装直接运行安装文件,它会提示你找到MSYS并给予相关配置,不用改什么,直接NEXT。大约74MB,占地80MB。1.1.4 测试打开MSYS,输入pkg-config.exe --cflags gtk+-2.0你看到了什么?1.2 GTK+的HELLO WORLD!首先,在c:\projects\下建立文件夹gtk其次,打开 开始->程序->GTK+->GLADE,设计GUI界面。在GLADE的GTK+ BASIC面板里点窗口(WINDOW)出现一个新窗口,然后选择标签(LABEL)(就是那个大A字),在窗口上点一下,一个新LABEL出现了。它显示的内容是“label1”,我们要改成“你好,GTK+!”在右边的WIDGET TREE里选中label1,然后在右下角的properties: label1里改变它的Label: 你好,GTK+!。然后点菜单Project->保存,保存到c:\projects\gtk\1.glade。 PROJECT DIRECTORY: c:\projects\gtk\1 project name: 1 program name: 1 project file: 1.glade然后,打开你喜欢的编辑器,写入下面代码并保存到c:\projects\gtk\1\1.c1.c:#include
#include
int main(int argc, char *argv[]) {GladeXML *xml;gtk_init(&argc, &argv);xml = glade_xml_new("1.glade", NULL, NULL);gtk_main();return 0;}最后,编译运行。打开MSYS,运行下面的命令(注意,下面出现的`不是单引号,而是~号下面的,确保1.EXE和1.GLADE放在同一个目录下):cd /c/projects/gtk/1gcc 1.c -o 1 `pkg-config --cflags --libs gtk+-2.0 libglade-2.0`./1看到了什么?一个小小的窗口,里面有一句:你好,GTK+!课后作业:尽量折腾1.glade,用GLADE改无数次,然后运行1.EXE看看有什么效果。
2006年05月26日 11点05分 1
level 9
assiss 楼主
0.0 写在前面的话--C也可以做很多事http://post.baidu.com/f?kz=1015759020.1工欲善其事,必先利其器--GCC以及MINGW http://post.baidu.com/f?kz=102049062
2006年05月26日 11点05分 2
level 9
assiss 楼主
5:1.检查你的c:\gtk\bin,是否有pkg-config.exe2.在msys里运行env回车,检查PATH=里有没有/C/GTK/bin
2006年05月26日 11点05分 6
level 9
assiss 楼主
你确信没打错吗?你能运行gtk-demo吗?
2006年05月26日 11点05分 8
level 9
assiss 楼主
不关它们的事。你输入pkg,然后按TAB键,出来什么?
2006年05月26日 12点05分 10
level 9
assiss 楼主
晕死。你什么系统啊?按TAB键之后再按回车,能运行pkg-config吗?
2006年05月26日 12点05分 12
level 9
assiss 楼主
证明刚才你输错命令了,继续学习吧,认真点。
2006年05月26日 12点05分 15
level 9
assiss 楼主
这些疑问我都会在下一篇文章里讲述。
2006年05月26日 14点05分 26
level 9
assiss 楼主
按CTRL+C,呵呵。下一节课里我会提到原因。
2006年05月26日 15点05分 36
level 9
assiss 楼主
下集预告:1.2 显示图片原来是这么简单--GTK+的图片引擎预计完成时间:周日我们将在1.2完成一个比较像样的图片显示程序。请大家练习好SHELL,并下载一两张漂亮的图片备用。
2006年05月26日 23点05分 38
level 9
assiss 楼主
新加入的朋友请先阅读上两篇文章。
2006年05月27日 03点05分 41
level 9
assiss 楼主
可以用gtk_widget_get_parent_window函数获得父窗口,然后比较一下。这两天比较忙,文章可能要推迟一些时间了。
2006年05月29日 04点05分 46
level 9
assiss 楼主
你可以试验一下,基本上查找10000个WIDGET也不需要多少时间,可以认为是O(N)的。
2006年05月29日 05点05分 48
level 9
assiss 楼主
54:你的问题答案就两个字:认真!!
2006年06月09日 03点06分 55
level 9
assiss 楼主
对于那些水平不是很高的同学,请不要乱改程序的安装路径,就用默认的吧。
2006年06月10日 11点06分 58
level 9
assiss 楼主
唉。楼上的,选择view菜单,然后一个一个点试试。
2006年06月12日 08点06分 61
level 9
assiss 楼主
看来你不太适合我听我的教程……
2006年06月13日 09点06分 63
level 9
assiss 楼主
你下载的可能是最新的gtk+-2.8.18,那个WIN32安装包有些问题。需要把C:\gtk\lib\pkgconfig\libpngxxx.pc改名成libpng12.pc
2006年06月19日 10点06分 66
level 9
assiss 楼主
改13那就行了
2006年06月19日 11点06分 69
level 9
assiss 楼主
gcc 1.c -o 1 `pkg-config --cflags --libs gtk+-2.0 libglade-2.0`
2006年06月19日 11点06分 71
1 2 尾页