linux应用程序开发指南之21-16.pdf

linux应用程序开发指南之21-16.pdf

ID:52243366

大小:977.38 KB

页数:37页

时间:2020-03-25

linux应用程序开发指南之21-16.pdf_第1页
linux应用程序开发指南之21-16.pdf_第2页
linux应用程序开发指南之21-16.pdf_第3页
linux应用程序开发指南之21-16.pdf_第4页
linux应用程序开发指南之21-16.pdf_第5页
资源描述:

《linux应用程序开发指南之21-16.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、下载第16章GDK基础16.1GDK和XlibGTK是用于实现图形用户接口的函数库。在Linux平台上,GUI(图形用户接口)使用的是称为X窗口(XWindow)的系统。X窗口系统是1984年由美国麻省理工学院(MIT)开发的。在Linux上使用的X窗口系统是一种称为XFree86的X版本。X窗口系统与MicrosoftWindows的图形用户接口有所不同,它是基于客户/服务器的。X服务器在计算机上运行,控制监视器、鼠标和键盘。X客户通过网络与服务器通讯。X服务器为X客户提供图形显示服务。也就是说,X客户和X服务器可能在

2、同一台计算机上运行,也可能在不同的计算机上运行。X窗口系统带有一套低级的库函数,称为Xlib。Xlib提供了许多对X窗口的屏幕进行操作的函数。当然,使用Xlib函数在屏幕上创建构件是很复杂的。GTK要在屏幕上绘制各种构件,就需要与X服务器打交道。但是GTK提供的构件库并未直接使用Xlib,而是使用了一个称为GDK的库。GDK的意思是GIMPDrawingToolkit,亦即GIMP绘图工具包。差不多每个Gdk函数都是一个相应Xlib函数的封装。但是Xlib的某些复杂性(和功能)被隐藏起来了。这样是为了简化编程,使Gdk更

3、容易移植到其他窗口系统(有一个在Windows平台上的Gdk版本)。被隐藏的Xlib功能一般是程序员极少用到的,例如,Xlib的许多特性只有窗口管理器才会用到,所以没有封装到Gdk当中。如果需要,可以在应用程序中直接调用Xlib函数,只要在文件头部包含gdk/gdkx.h头文件就可以了。一般情况下,如果要创建普通的图形接口应用程序,使用GTK就可以了。Gtk+和Gnome构件库提供了极为丰富的构件,足以构造非常复杂的用户界面。但是,如果需要开发新构件,或者要创建绘图程序,仅使用GTK就不够了。这时可以采用Xlib,更好的

4、方法是使用GDK库,它可以应付绝大多数的编程需要。本章介绍了关于GDK的一些基本知识,这些也是创建构件和绘图的基础。更多的GDK细节内容,请参考gdk.h头文件。如果想了解Gdk函数的实现细节(比如它对应于Xlib的哪一个函数),可以看一下Gdk的源代码以确定它所封装的Xlib函数,然后用man指令参看该函数的手册页。例如,下面是gdk_draw_point()函数的实现代码:voidgdk_draw_point(GdkDrawable*drawable,GdkGC*gc,gintx,ginty){GdkWindowPr

5、ivate*drawable_private;GdkGCPrivate*gc_private;g_return_if_fail(drawable!=NULL);g_return_if_fail(gc!=NULL);第16章GDK基础使237下载drawable_private=(GdkWindowPrivate*)drawable;if(drawable_private->destroyed)return;gc_private=(GdkGCPrivate*)gc;XDrawPoint(drawable_private->

6、xdisplay,drawable_private->xwindow,gc_private->xgc,x,y);}每一个数据结构都被转换给它的一个“私有”版本,该“私有”版本包含了与GDK正在使用的特定窗口系统的相关信息,这样可以将与特定窗口系统相关的函数声明排除在gdk/gdk.h头文件外。每个数据结构的“私有”版本都包含一个封装的Xlib数据结构,且这个数据结构被传递到XDrawPoint()函数中,所以XDrawPoint()函数的文档也适用于gdk_draw_point()函数。16.2GdkWindowGdkW

7、indow是Xlib窗口对象的封装。一个GdkWindow代表屏幕上的一个区域,可以显示或隐藏起来(在Xlib里面称为映射或反映射窗口),也可以捕获GdkWindow接收到的事件,还可以在里面绘制图像,移动或调整图像的尺寸。GdkWindow是以树状结构组织的,也就是说,每一个窗口都可以有子窗口。子窗口是相对于父窗口的位置定位的,当父窗口移动时,子窗口也会移动。子窗口不会在父窗口边界外的区域绘出(也就是说,它们会被父窗口剪裁)。所谓GdkWindow窗口的树状组织并不是针对每个应用程序的,实际上有一个由X服务器和窗口管理

8、器控制的窗口的全局树。根窗口没有父窗口,所有窗口都是从它派生而来的。作为桌面背景,根窗口的全部或部分总是可见的。每个窗口都可以为不同的Linux进程所拥有,一些窗口是由窗口管理器所创建的,还有一些来自于用户的应用程序。GdkWindow和GtkWindow是完全不同的东西。GtkWindow是一个Gtk+构件,用于表

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。