C语言图形化操作
C语言图形化操作
有时候,我们需要进行一些图形化操作,完成对所在项目的美化。例如,做贪吃蛇大作战,简单的用户注册模块。这时,就需要进行图形化操作,来进行美化。例如:
从上面我们发现,这是不是和我们传统的代码运行时的见面有所不同?
这两段代码是不是都具有颜色了呢?而且一些文字可不是通过打印空格使它输出于屏幕。
在上面我们运用了两个函数,一个是进行颜色修改的函数,一个是使光标移动到指定坐标,这样你就不需要一个个空格将你所要打印的内容移动到指定位置。在自定义上述两个函数时,需要先引进库函数“windows.h”。
一、我们这样来定义改变文字的颜色:
int color(int num) //num为每一种颜色所代表的数字,范围时0~15
{
SetConsoleTextAttribute(GetStdhandle(STD_OUTPUT_HANDLE),num);
return0;
}
SetConsoleTextAttribute是设置控制台窗口字体颜色和背景色的函数。
GetStdHandle是获得输入、输出或错误的屏幕缓冲区的句柄。其参数如下:
参数值 | 含义 |
STD_INPUT_HANDLE | 标准输入的句柄 |
STD_OUTPUT_HANDLE | 标准输出的句柄 |
STD_ERROR_HANDLE | 标准错误的句柄 |
例如,我们想要知道0~15每个数字所代表的颜色,可以这样做:
#include<stdio.h>
#include<windows.h>
intcolor(int c);
intmain()
{
int i;
for(i=0;i<=15;i++)
{
color(i);
printf("这是第%d号颜色\n",i);
}
}
intcolor(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
return 0;
}
程序运行的的结果如下
为什么没有“这是第0号颜色”呢?
如果数字超过15又会发生什么?请自行测试。
二、对光标所在位置进行修改
例如,如果我们想在屏幕中央打印“hello world”,我们可能会这样做:
printf(“ hello world\n”);
这样做是不是很麻烦呢?需要打印n个空格。
这是,我们可以通过自定义函数来实现将光标移动到指定位置:
void gotoxy(int x,int y)
{
COORDpos;
Pos.X=x; //横坐标
Pos.Y=y; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
使用SetConsoleCursorPosition函数来实现对光标位置的定位,COORD pos是一个结构体变量,其中X和Y是它的成员,通过修改pos.X 和 pos.Y的值实现对光标的修改。
在屏幕中,坐标系是这样建立的:
X从左往右递增,Y从上往下递增。即:最左上方可见像素的坐标是(0,0)
X、Y的可视值域取决于你的显示器分辨率。
以1024×768来说,X就在0~1024之间,Y在0~768之间。
凡超出这个范围,你就看不见了。
以在屏幕中央打印“hello world!”为例,代码如下:
#include<stdio.h>
#include<windows.h>
voidgotoxy(int x,int y);
intmain()
{
int i=0;
for(i=0;i<15;i++)
{
gotoxy(50,i);
printf("hello world!");
}
}
voidgotoxy(int x,int y)
{
COORD pos;
pos.X=x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
运行结果如下:
注意,若坐标位置不合适的话,可能会对前面内容产生覆盖。