CS349 Assignment 1总结
Assignment 1主要是联系在C/C++环境下通过X11库来编写图形界面程序。相信对于C/C++的规范,各位都很熟悉了。要使用X11库,通常需要include的库有X11/Xlib.h和X11/Xutil.h。所有库的reference可以在X的官方网站查询到:http://www.x.org/releases/X11R7.6/doc/libX11/specs/libX11/libX11.html本文只是简单的介绍了X11的基础功能,抛砖引玉。具体的函数用法可以参考reference,这里就不再赘述了。
要注意的是,上面的官方reference是针对X11R7版编写的,而在这个作业中,我们使用的是X11R6。具体两个版本有什么区别,这点笔者也不是很清楚。。。= =|||
这里先总结一下X11相关的概念和定义。Sever指的是要显示这个图形界面的终端,也就是你面前的电脑,而不是运行程序的终端。display指的是程序到x11 server的连接。screen是显示器,为什么要把显示器单独列出来呢?因为根据显示器的基本属性,比如分辨率和配色的不同,显示的结果也可能会不同。window就指的是创建的窗口了,一个程序可以有多个窗口。
XOpenDisplay(“”)用来打开一个display,函数返回指向这个display的指针,函数参数是server的名称,一般留空即可,程序会自动使用默认值。相应的,XCloseDisplay(display)可以关闭这个display,其中的display就是前面返回的display指针。
XCreateSimpleWindow可以创建一个窗口,函数参数制定了窗口的display, screen, 在屏幕上的位置,大小,背景色,创建出来的窗口默认是不会映射到服务器显示的。XDestroyWindow则可以销毁窗口。窗口创建好了之后需要使用XMapRaised函数来把创建的窗口映射到服务器显示。
程序生成的X11指令并不是实时发送到服务器执行的,XFlush函数可以强制把队列中的x11指令发送到服务器执行。而XSync函数出了具有XFlush的功能,但是XFlush只是将指令发送就会返回,并不保证所有的指令都已经发送完毕了。XSync函数可以保证这一点。(注意,是指令都发送完毕,而不是服务器接受并处理完毕)
XSelectInput指令可以制定窗口希望接收到的事件类型,比如窗口重绘,鼠标移动,鼠标点击,键盘按键按下和释放等等。XNextEvent可以用来接收事件,如果当前没有需要处理的事件的话,函数会一直等待,直到下一个事件接受之后才会返回。但有时候我们不希望程序因此而暂停执行,这时可以用XPending函数来检查当前事件队列的长度,如果返回0的话,我们就知道如果调用XNextEvent可能会导致线程被暂停了。
绘图指令函数有很多种,XDrawLine, XDrawPoint, XDrawRectangle, XDrawArc, XDrawLines, XDrawArcs, XFillPolygon, XFillRectangle, XFillArc等等。。。用法各位从函数名称基本就能猜出来了,参数也大同小异。
Graphic Context,简写GC,就像网页的css文件一样可以管理绘图函数的绘制风格,比如线条宽度,颜色,虚实线等等,几乎所有的绘图函数都需要传入一个gc。GC常用的建立方法有两种,一个是通过XGCValues;另一个则是直接创建GC,然后通过XSet类型的函数来设置。由于一个GC包含很多种属性,前者适合设置大量属性;后者则适合设置少量,或者在创建之后修改GC。
由于所有的绘图信号都是通过网络发送到本地X11服务器的,网速的快慢一定程度上会影响显示效果。usleep函数暂停线程执行的功能在这里就会显得尤为重要,一定程度上可以缓解由于网速而导致的画面闪烁。
整个assignment建议使用一个星期左右的时间完成。GL HF
This site uses Akismet to reduce spam. Learn how your comment data is processed.
Recent Comments
- Franny on 留言板
- jerry on UWaterloo的CS课程介绍,一篇充斥着淡淡忧伤的总结…..ˋ(╯ω╰)ˊ
- 上官小天 on UWaterloo的CS课程介绍,一篇充斥着淡淡忧伤的总结…..ˋ(╯ω╰)ˊ
- tooyoungtoosimple on UWaterloo的CS课程介绍,一篇充斥着淡淡忧伤的总结…..ˋ(╯ω╰)ˊ
- 上官小天 on UWaterloo的CS课程介绍,一篇充斥着淡淡忧伤的总结…..ˋ(╯ω╰)ˊ
Leave a Reply