Skip to content
Nerdy CSer一个曾经CS学生的寂寞
  • 留言板
  • 背后的脚印

CS349 Assignment 1总结

January 27, 2012 0 comments Article CS349

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

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

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课程介绍,一篇充斥着淡淡忧伤的总结…..ˋ(╯ω╰)ˊ

Categories

  • Android
  • CS349
  • CS350
  • CS458
  • I'm nerd
  • 学习笔记
  • 站务公告
  • 闲杂琐碎

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Copyright Nerdy CSer 2025 | Theme by ThemeinProgress | Proudly powered by WordPress