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);

}

运行结果如下:

注意,若坐标位置不合适的话,可能会对前面内容产生覆盖。

猜你喜欢

转载自blog.csdn.net/wang_zhao_/article/details/80456979