最 近在把玩Linux,感觉有把什么都Linux话的冲动,就连写这篇日志都想用在win下安的AndLinux里的FoxFire写,打开校内页面才想起 来,这个Linux环境是为了在其下学C语言搭建,没安汉字相关的东西,就是说不能显示汉字,所以刚才的页面当然是乱码,这样也能逼我学习下英语,by the way ,六级在前方……
刚才解决了在Linux下编写像TruboC下图形编程的问题,这些是我学计算机图形学遇到的一些东西。好了,下面就做下记录,省的早上时我就把我是怎么解决的给忘了……
参考链接
http://www.linuxdiyf.com/viewarticle.php?id=81907
| Linux终端图形库curses简介和实例分析 | ||||||||
| 作者: lktlks 发布日期: 2008-3-14 查看数: 132 出自: http://www.linuxdiyf.com | ||||||||
呵呵, 刚才忘了说了. 我们调用curses库一般是用C语言的(没什么奇怪, C可以说是Linux的官方语言, 不过你也可以用C++或Python等语言调用curses的, 这无关紧要). 假设我们把这个程序保存为 hello.c 不过不要急着用gcc -o hello hello.c去编译运行(我知道你会用gcc:) 那样是不能通过编译的. 因为curses库不在标准路径上, 所以我们要加上 -lcurses连接选项, 像这样: gcc -o hello hello.c -lcurses 现在你用 ./hello 运行一下程序看看,是不是出现了你所期望的窗口. 现在我们来一行行分析一下代码.
然后主函数中第一句initscr();初始化了屏幕, 使之开始进入curses图形化工作方式. 其实我们现在没有自己建立窗口, 用的是标准屏幕 stdscr(就象C里面标准输入stdin, 标准输出stdout一个概念), 它就是我们面前的电脑屏幕(不过现在还是黑黑的) 下面一句: box(stdscr, ACS_VLINE, ACS_HLINE); 画了一个框. 有了这个框我们才有"窗体"的感觉. stdscr就是标准屏幕, ACS_VLINE和ACS_HLINE代表构成方框两边的基本元素, 你也可以用 ''''|''''和''''-''''代替, 不过可能没有ACS_VLINE, ACS_HLINE好看了.
这两句是把光标移到屏幕中间, 然后输出我们的"Hello, world!" LINES 和 COLS是curses定义的宏, 代表当前屏幕的最大行数和列数. waddstr()函数的作用是在stdscr上打印字符串"hello, world!" 屏幕分物理屏幕(我们所看到的)和逻辑屏幕(在内存中的), 我们调用函数时修改的是逻辑屏幕,它不会在当前物理屏幕上显示出来.所以现在屏幕上还是什么也没有, 需要调用refresh()把我们对逻辑屏幕的改动在物理屏幕(显示器)上显示出来. 然后用getch()让屏幕暂停一下. 最后调用endwin()结束curses, 恢复原来的屏幕. 好了, 我们完成了第一个例子的分析. 是不是挺简单的? 不过不尽如人意的是屏幕还是那个样子, 没有什么色彩. 要加色彩? 那也是挺容易的: 首先用start_color()函数开启颜色模式, 然后设置我们要的颜色就行了. curses里的颜色是配对的, 要一个背景色对一个前景色. 使用之前用init_pair()初始化. 比如init_pair(1, COLOR_BLUE, COLOR_GREEN);就定义了一组颜色, COLOR_BLUE为前景色, COLOR_GREEN为背景色. 1是它们的标记号码(供其他函数调用时使用) 我们来看一个简单的例子:
这个程序假如保存为color.c 那么你可以这样编译了: gcc -o color color.c -lcurses 用./color一运行个彩色的字? 呵呵, 虽然不好看, 但是说不定你自己以后可以用curses写出精美的程序. |
大部分看上面的链接就好了,只是#include 后面是curses.h,然后第二个例子中在
waddstr(stdscr, "Yet another Hello, world!");
后加上getch();要不一闪而过,还以为错了呢!
就先写这些吧,有了新心得在修改就好了……

0 评论:
发表评论