C语言图形编程.docx
- 文档编号:2875607
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:17
- 大小:51.74KB
C语言图形编程.docx
《C语言图形编程.docx》由会员分享,可在线阅读,更多相关《C语言图形编程.docx(17页珍藏版)》请在冰豆网上搜索。
C语言图形编程
C的图形编程
一、屏幕显示模式
1、文本模式
在文本模式又称字符模式。
在此模式下整个屏幕被划分成(25行,80列),共25*80个文本单元,每个单元包括一个字符和一个属性,字符即ASCII码字符,属性规定该字符的颜色和强度。
坐标原点在屏幕的左上角。
如下图所示:
在
(1)定义一个文本窗口
voidwindow(intleft,inttop,intright,intbottom);
如要定义一个窗口左上角在屏幕(20,5)处,大小为30列15行的窗口可写成:
window(20,5,50,25);
(2) 文本窗口颜色的设置
voidtextbackground(intcolor);//设置背景颜色:
voidtextcolor(intcolor);//设置字符颜色:
有关颜色的定义见表1。
(3)光标定位
voidgotoxy(intx,inty);
(4)清屏
voidclrscr(void);
(5)其它函数
一、窗口文本的输出函数
intcprintf("<格式化字符串>",<变量表>);
intcputs(char*string);
intputch(intch);
cprintf()函数输出一个格式化的字符串或数值到窗口中。
它与printf()函数的用法完全一样,区别在于cprintf()函数的输出受窗口限制,而printf()函数的输出为整个屏幕。
cputs()函数输出一个字符串到屏幕上,它与puts()函数用法完全一样, 只是受窗口大小的限制。
putch()函数输出一个字符到窗口。
二、窗口文本的输入函数
intgetche(void);
getche()函数从键盘上获得一个字符,在屏幕上显示的时候,如果字符超过了窗口右边界,则会被自动转移到下一行的开始位置。
例1:
下面这个程序使用了关于窗口大小的定义、颜色的设置等函数,在一个屏幕上不同位置定义了7个窗口,其背景色分别使用了7种不同的颜色。
#include
#include
voidmain(void)
{inti;
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:
捕获键盘按键。
键盘扫描码:
每个键都有一个两字节的扫描码,其格式:
#defineESC0x011B
#defineUP0x4800
#defineDOWN0x5000
#defineLEFT0x4B00
#defineRIGHT0x4D00
#defineENTER0x1C0D
在头文件
intbioskey(intmode);//此函数声明于bios.h
mode为1时,如有按键盘,则记录其扫描码至缓冲区,并返回其扫描码;无按键则返回0;不清除缓冲区。
mode为0时,从键盘缓冲区取出按键,并清除缓冲区。
若没有的话,则等待。
如:
ESC
UP
DOWN
LEFT
RIGHT
F1
F2
A
Z
a
z
#include
#inlcude
unionkeyTest
{
intc;
charch[2];
};
voidmain(void)
{unionkeyTestk;
while
(1)
{
while(bioskey
(1)==0);
/*function1returns0untilakeyispressed*/
k.c=bioskey(0);
/*function0returnsthekeythatiswaiting*/
printf(“High=[%d],Low=[%d]\n”,k.c,k.ch[1],k.ch[0]);
}
}
例3:
C提供的随机函数:
voidrandomize(); //初始化随机数发生器
intrandom(intubound);//返回围在0到ubound-1之间的一个随机整数。
2、图形模式
不同的显示器适配器(显卡)有不同的图形分辨率。
即是同一显卡,在不同模式下也有不同分辨率。
因此,在屏幕作图之前,必须根据显卡种类将显示器设置成为某种图形模式。
VGALO 0 16色 640*200
VGA VGAMED 1 16色 640*350
VGAHI 2 16色 640*480
(1)图形模式的初始化
在屏幕作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作。
设置屏幕为图形模式,可用下列图形初始化函数:
voidinitgraph(int*gdriver,int*gmode,char*path);
表2.图形驱动器、模式的符号常数及数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
图形驱动器(gdriver) 图形模式(gmode)
─────────── ─────────── 色调 分辨率
符号常数 数值 符号常数 数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CGA 1 CGAC0 0 C0 320*200
CGAC1 1 C1 320*200
CGAC2 2 C2 320*200
CGAC3 3 C3 320*200
CGAHI 4 2色 640*200
───────────────────────────────────
MCGA 2 MCGAC0 0 C0 320*200
MCGAC1 1 C1 320*200
MCGAC2 2 C2 320*200
MCGAC3 3 C3 320*200
MCGAMED 4 2色 640*200
MCGAHI 5 2色 640*480
───────────────────────────────────
EGA 3 EGALO 0 16色 640*200
EGAHI 1 16色 640*350
───────────────────────────────────
EGA64 4 EGA64LO 0 16色
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 图形 编程