在看厌了TC编的命令行程序后,愈发觉得不爽,于是急切的想做一点TC的图形编程。TC自带的graphics库是一个不错的选择,但也有缺憾,只能支持到VGAHI图形模式,即640*480*16色,对图像的表现力真的太差。
还好在网上找到了一套功能较为完善的TC256图形函数库,它支持SVGA的640*480*256色的视频模式,支持汉字的输出、鼠标功能、256色位图输出、EMS内存管理、基本绘图函数、图像特效(动画、Alpha混合)等全面而强大的功能。本文不打算详细探讨该库的每一个函数的使用,而只具体讲讲该函数库的使用、编译方法和编程及编译时常遇到的问题。
使用方法。安装很简单,所有的函数都以源代码形式放在include目录下的.h文件中,只有将所有.h文件复制到您的TC的include目录下即可。一般这一步都没问题。
在编程时,需#include<all256.h>,将包含所有的TC256函数库功能。
通常使用该函数库的程序都采用以下框架:
#include<all256.h>
int main(void)
{
init256(SINGLE_SURFACE);
vpost();
close256();
return 0;
}
我们可以将所有的图形操作和您的程序代码插入到init256();与close256();两句之间,这也是属于成对编码的规范(关于成对编码请参看本站的《成对编码规范》一文)。
关于编译问题。由于TC256库使用了EMS内存,而且要求使用Compact以上的内存模式进行编译,所以要在TC的Options->Compile->Model中改内存模式,一般改为Huge即可。改完后还别忘记保存(Options->Save Options)。保存后即可进行编译,一般编译通过后即可运行。但是在Windows操作系统下可能会出现没有安装EMS内存驱动而无法运行的问题(双击后,一般症状是程序运行一闪而过)。在WinXP下的解决方法是右键单击您编译生成的程序,选“属性”项,在弹出对话框中选“内存”选项卡,将EMS内存设为最大(默认为无,选择下拉列表中最下面一个即可),设置完后点击确定,此时会在同一目录下生成一个指向该程序的MS-DOS快捷方式,千万不要觉得它不顺眼而把它删掉了,你的程序的正常运行全靠它了。此刻再双击你的程序,即可正常运行了。在Windows2000下好像不行,尽管可以像上面一样的进行设置,可是设置以后的程序就是无法运行,听说可以装一个什么软件的,不过到现在本人还是没搞定Win2000的问题,以后再研究吧。在Win95/98下,程序应该都能够正常运行的。
在编写程序时常会犯的错误。用过TC256库的人都应该知道puts256()这个函数,它就是在屏幕上输出一个中文字符串,看一下代码:
#include<all256.h>
int main(void)
{
init256(SINGLE_SURFACE);
puts256(10,10,"你好TC256!",YELLOW);
getch();
close256();
}
以上程序是编译能通过,可运行,可是却没有我们想要的效果,刚开始本人研究TC256库的时候就犯了这样的错误,明明用了puts256()这个函数,可是屏幕上就是没有字显示出来。就在我打算放弃的时候,才偶然在演示程序中发现了vpost()这个神秘的函数。在init256()时,我们传了SINGLE_SURFACE这个常量,就是将TC256系统初始化为单页面模式,相当于常说的双缓冲。我们所有的操作结果是不会立即反映到屏幕上的。刚才的puts256()的操作结果只是存放在了一个由TC256系统维护的缓冲区中,而vpost()的作用及时将缓冲区中的内容送入到显存里去,在vpost()之后,我们就能看到操作结果了。而使用缓冲和vpost()的意义在于提高TC256的图形性能和消除绘制图形时的闪烁。因此,正确的代码应该如下:
#include<all256.h>
int main()
{
init256(SINGLE_SURFACE);
puts256(10,10,"我好激动,我终于会用TC256函数库了!",YELLOW);
vpost();
getch();
close256();
}
另外,可能犯的错误是,汉字的输出要用到两个点阵字库,分别是hzk16和hzk24,如果你的程序找不到这两个文件,汉字的输出也会失败,通常在发布您的程序时,只要将你的程序和两个hzk文件放在同一目录下即可。(注:两个hzk文件都分别在TC256的压缩包里能找到)。
(未完待续)
作者:陈凯
2004.7.10
版权所有、不得转载