网站首页
手机版

可移植的256色图形用户界面的设计

更新时间:2005-12-20 10:43:41作者:未知

摘 要 该文从软件可移植性的角度指出设计256色图形用户界面时应当注意的问题,在对SuperVGA产品进行分析的基础上,提出了基于表格驱动的程序设计思想,并给出了范例。
随着各种超级VGA的出现,同时具有高分辨率和丰富色彩的图形用户界面已经成为程序员和用户共同追求的目标。然而由于各制造商提供的VGA产品之间的差异,使得高分辨率256色图形界面的兼容性受到影响,常常会出现这样的情况:在一个显示系统下运行良好的程序,在另一种显示系统下变得面目全非,甚至根本不显示。这表明程序员对程序的可移植性重视不够,或对各种显示设备缺乏足够的了解。
软件的可移植性是指软件产品从一个硬件/软件环境转移到另一个硬件/软件环境的难易与繁简程度。它从软件对新环境的适应性这一方面,反映了软件的质量。为了提高软件的可移植性,应尽量使软件与具体的设备无关,即提高软件的设备独立性。对于256色图形界面而言,就是要使程序不依赖于某种特定的显示器。例如,程序员没有任何理由假定用户使用的是TVGA。为此,程序员必须提供显示卡的常规检测例程,并能根据检测的结果决定图形算法的具体实现。
提高软件设备独立性的方法有很多,表格驱动就是其中一种。所谓表格,就是根据需要设计的数据结构。表格中的数据由检测例程填写。表格中包含哪些栏目,应在对各制造商提供的SuperVGA产品足够了解的基础上取舍,栏目应体现各产品之间的差异。
一、SuperVGA编程综述
SuperVGA产品在体系结构上和标准的IBM VGA有所不同。但编程思想基本上是一样的,这些编程方法已有许多文章介绍,这里不再重复。
分析,用以驱动显示系统的表格,至少应当包含下列项目:
(1)实际显示模式:vga-mode
(2)水平分辨率:vga-width
(3)垂直分辨率:vga-depth
(4)页选择例程的入口地址:PageSelect
(5)当前显示方式所使用的最大页号:vga-pages
这个表格由图形初始化例程来填写。图形初始化例程接收的显示模式是统一的模式号,这样可以撇开具体的设备,如InitVGA(TVGA800×600)。该例程调用显示设备检测程序DetectVGA来判断显示器的类型,从而填写表格中的各栏目,并初始化图形系统为所需的图形方式。所有图形算法都要查此表。
除了用上述方法来实现兼容外,视频电子学标准协会(VESA)为我们提供了另一种方法
VESA
提供了一组附加的BIOS功能,这组功能以标准的方式访问SuperVGA扩充的模式。VESA的附加功能都是通过BIOS中断10H的4FH功能来实现的。VESA的子功能01能返回非常有用的SuperVGA模式信息,包括分页例程的地址。
因此,程序员可以按照VESA的标准来编写图形系统,这样的程序可以在所有支持VESA的显示器上运行。由于VESA包括了世界上的主要VGA供应商,写出来的程序可移植性是很好的。但是,其效率却可能是最低的。所以最好采用一种折衷的办法,对于熟悉的产品,可以不用VESA的功能,对于不熟悉(资料不全)或检测不出来的显示器尝试用VESA提供的手段来编程,当然要检测显示设备是否支持VESA。
有时出于某种考虑,不希望支持所有显示设备的代码集中在一个程序中,可以为每个显示设备分别提供驱动模块,主程序根据检测的结果选择一个合适的模块加载。Borland的C++就是这样,它有一套BGI驱动程序,各驱动程序提供统一的图形函数接口。笔者在实际工作中,为每一种显示设备编写了一个256色的BGI格式的驱动程序,这样,在编写图形系统时,再也没有必要考虑用户的实际显示设备了。
三、范 例
本文附有两个图形显示的例子。ShowGif能显示16/256色GIF格式图像,能以任何256色模式启动,支持多种显示器。图像可以漫游,并可随时通过按键切换显示方式。Main则是一个BGI驱动的鼠标/键盘控制的256色汉字图形菜单。它自己会挑选一个合适的BGI,也可以从命令行指定一个BGI(比如指定VESA256给TVGA显示器)。
限于篇幅,这里仅给出有关的数据结构和部分函数的说明(程序2)。然后给出一个初始化显
示系统的C语言片断(程序3)。
程序2(TVGA256.H):
/* 统一的模式集 */
enum TVGA-MODE
TVGA320x200=0,
TVGA640x400=1,
TVGA640x480=2,
TVGA800x600=3,
TVGA1024x768=4,
;
void TVGA256-driver(void);
void PVGA256-driver(void);
void AVGA256-driver(void);
...
void VESA256-driver(void);
extern int far-Cdecl TVGA256-driver-far[];
extern int far-Cdecl PVGA256-driver-far[];
extern int far-Cdecl AVGA256-driver-far[];
...
extern int far-Cdecl VESA256-driver-far[];
/* 支持的VGA集合 */
enum VGAs{
UnKnownVGA,
TridentVGA,
ParadiseVGA,
AheadVGA,
...
VesaVGA
};
/* 对应的BGI驱动程序名 */
unsigned char *Drivers[]={
"TVGA256",
"TVGA256",
"AVGA256",
...
"VESA256",
};
extern int DetectVGA(void);
/* 功 能:检测显示卡的型号
返回值:0-Unknowm1-Trident VGA2-Paradise VGA
...
x-不能检测出的VGA,但支持VESA
返回值同时写入全局变量vga-type */
extern int VesaFound(void);
/* 功 能:检测VESA BIOS的存在性
返 回:0-不支持VESA;
其它-VESA版本号(0x0102即1.02版);
返回值同时写入全程变量vesa-found. */
extern void InitVesa(void);
/* 功 能:初始化VESA.根据-vga-mode模式号换算成VESA的标准模式号填写页粒度(WinGranularity),页大小(WinSize),
和分页例程的入口地址(WinFuncPtr)
VESA的标准模式解释如下:
100h-640x400 256
101h-640x480 256
102h-800x600 16
103h-800x600 256
104h-1024x768 16
105h-1024x768 256 etc.
InitVesa供给InitVGA调用 */
extern void InitVGA(int mode);
/* 功 能:初始化显示系统(自动调用DetectVGA检测显示卡)
参 数:mode=TVGA320x200(0)
TVGA640x400(1)
TVGA640x480(2)
TVGA800x600(3)
TVGA1024x768(4)
返 回:InitVGA没有显式的返回值,但它初始化下列全程变量:
vga-mode,vga-width,vga-depth,vga-pages,PageSelect
必要时自动调用InitVesa
*/
extern int vga-type;
extern int vga-mode;
extern int vga-width;
extern int vga-depth;
extern int vga-pages;
extern int vga-pages;
extern char page-number;
extern int vesa-found;
...
程序3(初始化显示系统的程序片断):
...
int GraphDriver, GraphMode;
unsigned char *bgiDriver="PVGA256";
bgiDriver=Drivers[DetectVGA()];
GraphDriver=installuserdriver(bgiDriver,NULL);
GraphMode=TVGA800x600;
initgraph(&GraphDriver, &GraphMode," ");...

参考文献
1 来文占等编译.Super VGA高级编程指南.北京:北京科海培训中心,1991.5.
2 张一波编译.Super VGA与VESA编程指南.北京:海洋出版社,1992

转贴于 中国论文下载中心 http://paper.studa.com

本文标签:

为您推荐

FOXPRO在三峡工程信息管理中的应用

三峡工程是世界级的巨型工程,专业门类多、技术复杂、信息管理工作量巨大,必须使用MIS系统对信息进行收集、整理、存储、统计、分析、制表。几年来,我们先后用FOXBASE、FOXPRO编制了《工资管理系统》、《土石方工程量计算程序》、《工程支付管理系统》、《文档管理系统

2011-11-09 16:03

论信息技术在外语教学中的应用

随着信息技术的发展, 计算机多媒体技术和网络被广泛地应用在外语教学中, 改变了传统外语教学模式。现代化外语教学提高了外语教学水平, 从而培养高素质的外语人才, 满足日益增长的社会需求。

2011-11-09 16:02

对计算科学与计算机发展的思考

本文从什么是计算说起, 通过对计算机的发展历史和人类对计算本质认识的回顾, 提出量子计算系统的发展和成熟, 并且提出了人类认识未知世界的规律:“计算工具不断发展—整体思维能力的不断增强—公理系统的不断扩大—旧的神谕被解决—新的神谕不断产生”不断循环。

2011-11-09 16:01

试析高职院校计算机专业教学的改革

提高高职院校计算机专业的教学水平,是高职院校计算机教育工作者应该深入思考的问题。通过分析高职院校计算机专业教育的教学特点,从如何培养计算机应用型人才的角度出发,对高职计算机专业教学中存在的不足进行了总结,并提出了几点改革设想。

2011-11-09 16:00

水利工程计算机应用现状与思考

水利水电工程地质又是所有这些不同行业的工程地质专业中涉及面最广声望最高问题最复杂任务最艰巨的专业,这是众所周知毋庸置疑的。水利工程计算机应用具有广阔的发展前景,无论是数值计算、数据库应用,还是专家系统、网络系统,都大有用武之地;特别是工程地质制图(主

2011-11-09 15:59

论高职计算机应用专业课程优化与整合

课程体系是教育教学目标实现的重要保证,高职计算机应用专业课程体系要以为社会培养计算机应用性专门人才这一根本任务而进行设计,本文对计算机应用专业课程设置进行一定的探讨。

2011-11-09 15:58

加载中...