C语言图形编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C的图形编程

一、屏幕显示模式

1、文本模式

在文本模式又称字符模式。在此模式下整个屏幕被划分成(25行,80列),共25*80个文本单元,每个单元包括一个字符和一个属性, 字符即ASCII 码字符, 属性规定该字符的颜色和强度。

坐标原点在屏幕的左上角。如下图所示:

头文件中定义了文本模式下一些函数常用的有;

(1)定义一个文本窗口

void window(int left, int top, int right, int bottom);

如要定义一个窗口左上角在屏幕(20, 5)处, 大小为30列15行的窗口可写成:

window(20, 5, 50, 25);

(2)文本窗口颜色的设置

void textbackground(int color); //设置背景颜色:

void textcolor(int color); //设置字符颜色:

有关颜色的定义见表1。

(3)光标定位

void gotoxy(int x, int y);

(4)清屏

void clrscr(void);

(5)其它函数

一、窗口内文本的输出函数

int cprintf("<格式化字符串>", <变量表>);

int cputs(char *string);

int putch(int ch);

cprintf()函数输出一个格式化的字符串或数值到窗口中。它与printf() 函数的用法完全一样, 区别在于cprintf()函数的输出受窗口限制, 而printf() 函数的输出为整个屏幕。

cputs()函数输出一个字符串到屏幕上, 它与puts()函数用法完全一样, 只是受窗口大小的限制。

putch()函数输出一个字符到窗口内。

二、窗口内文本的输入函数

int getche(void);

getche()函数从键盘上获得一个字符, 在屏幕上显示的时候, 如果字符超过了窗口右边界, 则会被自动转移到下一行的开始位置。

例1:下面这个程序使用了关于窗口大小的定义、颜色的设置等函数, 在一个屏幕上不同位置定义了7个窗口, 其背景色分别使用了7种不同的颜色。

#include

#include //文本模式下的函数

void main(void)

{ int i;

char *c[]={"BLACK", "BLUE", "GREEN", "CYAN", "RED", "MAGENTA", "BROWN", "LIGHTGRAY"};

textbackground(0); /* 设置屏幕背景色*/

clrscr(); /* 清除文本屏幕*/

cputs(c[0]);

for(i=1; i<8; i++)

{ window(10+i*5, 5+i, 30+i*5, 15+i); /* 定义文本窗口*/

textbackground(i); /* 定义窗口背景色*/

clrscr();

cputs(c[i]); /* 清除窗口*/

}

getch();

}

表1. 有关颜色的定义

━━━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数数值含义字符或背景

───────────────────────────

BLACK 0 黑两者均可

BLUE 1 兰两者均可

GREEN 2 绿两者均可

CYAN 3 青两者均可

RED 4 红两者均可

MAGENTA 5 洋红两者均可

BROWN 6 棕两者均可

LIGHTGRAY 7 淡灰两者均可

DARKGRAY 8 深灰只用于字符

LIGHTBLUE 9 淡兰 只用于字符

LIGHTGREEN 10 淡绿 只用于字符

LIGHTCYAN 11 淡青 只用于字符

LIGHTRED 12 淡红 只用于字符

LIGHTMAGENTA 13 淡洋红 只用于字符

YELLOW 14 黄 只用于字符

WHITE 15 白 只用于字符

BLINK 128 闪烁 只用于字符

━━━━━━━━━━━━━━━━━━━━━━━━━━━

例2:捕获键盘按键。

键盘扫描码:

每个键都有一个两字节的扫描码,其格式:

#define ESC 0x011B

#define UP 0x4800

#define DOWN 0x5000

#define LEFT 0x4B00

#define RIGHT 0x4D00

#define ENTER 0x1C0D

在头文件

中定义如下函数,用以捕获键盘按键。

int bioskey(int mode); //此函数声明于 bios.h

mode 为1时,如有按键盘,则记录其扫描码至缓冲区,并返回其扫描

码;无按键则返回0; 不清除缓冲区。

mode

为0时,从键盘缓冲区取出按键,并清除缓冲区。若没有的话,

则等待。

如:ESC

UP

DOWN

LEFT

RIGHT

F1

F2

A

Z

a

z

#include

#inlcude

union keyTest

{

int c;

char ch[2];

};

void main(void)

{ union keyTest k;

while(1)

{

while(bioskey(1)= =0);

/* function 1 returns 0 until a key is pressed */

k.c = bioskey(0);

/* function 0 returns the key that is waiting */

printf(“High=[%d],Low=[%d]\n ”,k.c,k .ch[1],k .ch[0]);

}

}

例3:C 提供的随机函数:

void randomize(); //初始化随机数发生器

int random(int ubound); //返回范围在0到ubound - 1之间的一个随机整数。

2、图形模式

不同的显示器适配器(显卡)有不同的图形分辨率。即是同一显卡, 在

不同模式下也有不同分辨率。因此, 在屏幕作图之前, 必须根据显卡种类将显示器设置成为某种图形模式。

VGALO 0 16色 640*200

VGA VGAMED 1 16色 640*350

VGAHI 2 16色 640*480

相关文档
最新文档