|
|
|
|
|
|
| 可移植的256色图形用户界面的设计 |
/* 支持的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. | | |