xlib库基本图形编程技术文档新手入门linux时代开源自由共享.docx
- 文档编号:25221283
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:8
- 大小:19.42KB
xlib库基本图形编程技术文档新手入门linux时代开源自由共享.docx
《xlib库基本图形编程技术文档新手入门linux时代开源自由共享.docx》由会员分享,可在线阅读,更多相关《xlib库基本图形编程技术文档新手入门linux时代开源自由共享.docx(8页珍藏版)》请在冰豆网上搜索。
xlib库基本图形编程技术文档新手入门linux时代开源自由共享
xlib库基本图形编程技术文档新手入门linux时代开源、自由、共享...
Xlib库基本图形编程
BasicGraphicsProgrammingWithTheXlibLibrary
http:
//users.actcom.co.il/~choo/lupg/tutorials/xlib-programming/xlib-programming.html
1.Preface
2.TheClientAndServerModelOfTheXWindowSystem
3.GUIprogramming-theAsynchronousProgrammingModel
4.BasicXlibNotions
1.TheXDisplay
2.TheGC-GraphicsContext
3.ObjectHandles
4.MemoryAllocationForXlibStructures
5.Events
5.CompilingXlib-BasedPrograms
6.OpeningAndClosingTheConnectionToAnXServer
7.CheckingBasicInformationAboutADisplay
8.CreatingABasicWindow-Our"helloworld"Program
9.DrawingInAWindow
1.AllocatingAGraphicsContext(GC)
2.DrawingPrimitives-Point,Line,Box,Circle...
10.XEvents
1.RegisteringForEventTypesUsingEventMasks
2.ReceivingEvents-WritingTheEventsLoop
3.ExposeEvents
4.GettingUserInput
1.MouseButtonClickAndReleaseEvents
2.MouseMovementEvents
3.MousePointerEnterAndLeaveEvents
4.TheKeyboardFocus
5.KeyboardPressAndReleaseEvents
5.XEvents-ACompleteExample
11.HandlingTextAndFonts
1.TheFontStructure
2.LoadingAFont
3.AssigningAFontToAGraphicsContext
4.DrawingTextInAWindow
12.WindowsHierarchy
1.Root,ParentAndChildWindows
2.EventsPropagation
13.InteractingWithTheWindowManager
1.WindowProperties
2.SettingTheWindowNameAndIconName
3.SettingPreferredWindowSize(s)
4.SettingMiscellaneousWindowManagerHints
5.SettingAnApplication'sIcon
14.SimpleWindowOperations
1.MappingAndUN-MappingAWindow
2.MovingAWindowAroundTheScreen
3.ResizingAWindow
4.ChangingWindowsStackingOrder-RaiseAndLower
5.IconifyingAndDe-IconifyingAWindow
6.GettingInfoAboutAWindow
15.UsingColorsToPaintTheRainbow
1.ColorMaps
2.AllocatingAndFreeingColorMaps
3.AllocatingAndFreeingAColorEntry
4.DrawingWithAColor
16.XBitmapsAndPixmaps
1.WhatIsAnXBitmap?
AnXPixmap?
2.LoadingABitmapFromAFile
3.DrawingABitmapInAWindow
4.CreatingAPixmap
5.DrawingAPixmapInAWindow
6.FreeingAPixmap
17.MessingWithTheMouseCursor
1.CreatingAndDestroyingAMouseCursor
2.SettingAWindow'sMouseCursor
--------------------------------------------------------------------------------
Preface
Thistutorialisthefirstinaseriesof"would-be"tutorialsaboutgraphicalprogrammingintheXwindowenvironment.Byitself,itisuseless.ArealXprogrammerusuallyusesamuchhigherlevelofabstraction,suchasusingMotif(oritsfreeversion,lesstiff),GTK,QTandsimilarlibraries.However,weneedtostartsomewhere.Morethanthis,knowinghowthingsworkdownbelowisneverabadidea.
Afterreadingthistutorial,onewouldbeabletowriteverysimplegraphicalprograms,butnotprogramswithadescentuserinterface.Forsuchprograms,oneofthepreviouslymentionedlibrarieswouldbeused.
--------------------------------------------------------------------------------
X窗口系统的客户/服务器模式
当初开发X窗口系统的主要目的只有一个,那就是灵活性。
这个灵活性的意思就是说一件东西虽然看起来是在这工作,但却实际上是工作在很远的地方。
因此,较低等级的实现部分就必须提供绘制窗口,处理用户输入,画画,使用颜色等工作的工具。
在这个要求下,决定了系统被分成了两部分,客户端和服务器端。
客户端决定做什么,服务器端执行真正的绘图和接受用户的输入并把它发给客户端。
这种模式与我们一般习惯的客户端和服务器端的概念是正好相反的。
在我们的情况下,用户就坐在服务器端控制的机器前,而客户端这时却是运行在远程主机上。
服务器端控制着显示屏,鼠标和键盘。
一个客户端也许正连接着服务器端,要求给它画一个窗口(或者是一堆),并要求服务器端把用户对它的窗口的输入传给它。
结果,好几个客户端可能连接到了一个服务器端上-有的在运行一个电子邮件软件,有的在运行一个网页浏览器等。
当用户输入了指令给窗口,服务器端就会把指令打包成事件传给控制那个窗口的客户端,客户端根据接受到的事件决定干什么然后发送请求让服务器端去画什么。
以上介绍的会话都是通过X消息协议传输的。
该协议是实现在TCP/IP协议上的,它允许在一个网络里的客户端访问这个网络里的任何服务器端。
最后,X服务器端可以和客户端运行在同一台机器上以获得性能优化(注意,一个X协议事件可能会达到上百KB),例如使用共享内存,或者使用Unix域socket(在一个Unix系统的两个进程间创建一个本地通道进行通信的方法)。
--------------------------------------------------------------------------------
图形用户接口(GUI)编程-异步编程模式
不像我们通常的令人愉快的程序,一个GUI程序通常使用异步编程模式,也就是下面要介绍的"事件驱动编程"。
这个"事件驱动编程"的意思是说程序通常都处于空闲状态,等待从X服务器发来的事件,等收到了事件,才根据事件做相应的事情。
一个事件可能是"用户在屏幕某处x,y点击了鼠标左键",或者是"你控制的窗口需要被重画"。
因为程序要回应用户的请求,同时还需要刷新自己的请求队列,因此需要程序尽可能使用较短的事件来处理一个事件(例如,作为一条公认的准则,不能超过200毫秒)。
这也暗示着当然存在需要程序处理很长时间才能完成的事件(例如一个到远程服务器的网络连接,或者是连接一个数据库,或者是不幸的要处理一个超大文件的复制工作)。
这都要求程序使用异步方式来处理而不是通常的同步方式。
这时候就应该采用各种各样的异步编程方法来进行这些耗时的工作了,或者干脆把它们交给一个线程或进程来进行。
根据以上的说明,一个GUI程序就应该像以下的方式来工作:
进行初始化工作
连接X服务器
进行与X相关的初始化工作
进行循环
从X服务器那里接受下一个事件
根据收到的事件发送各种绘图指令给X服务器
如果事件是个退出事件,结束循环
关闭与X服务器的连接
进行资源释放工作
--------------------------------------------------------------------------------
Xlib的基本思想
X协议是非常复杂的,为了大家不用再辛辛苦苦把时间浪费在实现它上面,就有了一个叫"Xlib"的库。
这个库提供了访问任何X服务器的非常底层的手段。
因为X协议已经被标准化了,理论上客户程序使用任何Xlib的实现都可以访问任何X服务器。
在今天,这看起来可能很琐碎,但如果回到那个使用字符终端和专有绘图方法的时代,这应该是一个很大的突破吧。
实际上,你很快发现围绕瘦客户机,窗口终端服务器等领域会有许多多么令人兴奋的事情。
--------------------------------------------------------------------------------
X显示
使用XLib的基本思想就是X显示。
它代表了一个打开的到X服务器的连接的结构。
它隐藏了一个保存有从X服务器来的事件的队列,和一个保存客户程序准备发往服务器的请求队列。
在Xlib里,这个结构被命名为显示"Display"。
当我们打开了一个到X服务器的连接,库就会返回一个指向这个结构的指针。
然后,我们就可以使用这个指针来使用Xlib里各种各样的函数。
--------------------------------------------------------------------------------
GC-图形上下文
当我们进行各种绘图操作(图形,文本等)的时候,我们也许会使用许多参数来指定如何绘制,前景,背景,使用什么颜色,使用什么字体等等,等等。
为了避免为每个绘图函数设置数量惊人的参数,我们使用一个叫"GC"的图形上下文结构。
我们在这个结构里设置各种绘图参数,然后传给绘图函数就行了。
这应当是一个非常方便的方法吧,尤其当我们在进行一连串操作中使用相同的参数时。
--------------------------------------------------------------------------------
对象句柄
当X服务器为我们创建了各种各样的对象的时候-例如窗口,绘图区和光标-相应的函数就会返回一个句柄。
这是一个存在在X服务器空间中的对象的一个标识-而不是在我们的应用程序的空间里。
在后面我们就可以使用Xlib的函数通过句柄来操纵这些对象。
X服务器维护了一个实际对象到句柄的映射表。
Xlib提供了各种类型来定义这些对象。
虽然这些类型实际上只是简单的整数,但我们应该继续使用这些类型的名字-理由是为了可移植。
--------------------------------------------------------------------------------
Xlib结构的内存分配
Xlib的接口使用了各种类型的结构。
有些可以由用户直接来分配内存,有些则只能使用专门的Xlib库函数来分配。
在使用库来分配的情况,库会生成有适当初始参数的结构。
这对大家来说是非常方便的,指定初始值对于不太熟练的程序员来说是非常头疼的。
记住-Xlib想要提供非常灵活的功能,这也就意味着它也会变得非常复杂。
提供初始值设置的功能将会帮助那些刚开始使用X的程序员们,同时不会干扰那些高高手们。
在释放内存时,我们使用与申请的同样方法来释放(例如,使用free()来释放malloc()申请的内存)。
所以,我们必须使用XFree()来释放内存。
事件
一个叫"XEvent"的结构来保存从X服务器那里接受到的事件。
Xlib提供了非常大量的事件类型。
XEvent包括事件的类型,以及与事件相关的数据(例如在屏幕什么地方生成的事件,鼠标键的事件等等),因此,要根据事件类型来读取相应的事件里的数据。
这时,XEvent结构使用c语言里的联合来保存可能的数据(如果你搞不清楚c的联合是怎么回事,那你就得花点时间再读读你的教科书了)。
结果,我们就可能受到XExpose事件,一个XButton事件,一个XMotion事件等等。
--------------------------------------------------------------------------------
编译基于Xlib的程序
编译基于Xlib的程序需要与Xlib库连接。
可以使用下面的命令行:
ccprog.c-oprog-lX11
如果编译器报告找不到X11库,可以试着加上"-L"标志,像这样:
ccprog.c-oprog-L/usr/X11/lib-lX11
或者这样(针对使用X11的版本6)
ccprog.c-oprog-L/usr/X11R6/lib-lX11
在SunOs4系统上,X的库被放到了/usr/openwin/lib
ccprog.c-oprog-L/usr/openwin/lib-lX11
等等,具体情况具体分析
--------------------------------------------------------------------------------
打开,关闭到一个X服务器的连接
一个X程序首先要打开到X服务器的连接。
我们需要指定运行X服务器的主机的地址,以及显示器编号。
X窗口允许一台机器开多个显示。
然而,通常只有一个编号为"0"的显示。
如果我们想要连接本地的显示(例如进行显示的机器同时又是客户程序运行的机器),我们可以直接使用":
0"来连接。
现在我们举例,连接一台地址是"simey"的机器的显示,我们可以使用地址"simey:
0",下面演示如何进行连接
#include/*definescommonXlibfunctionsandstructs.*/
.
.
/*thisvariablewillcontainthepointertotheDisplaystructure*/
/*returnedwhenopeningaconnection.*/
D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- xlib 基本 图形 编程 技术 文档 新手入门 linux 时代 源自 共享
![提示](https://static.bdocx.com/images/bang_tan.gif)