关于gotoxy()与 clrscr()、textbackground()函数

在VS2010中无法直接调用这两个函数,可以通过自己添加来实现调用。

1.gotoxy()函数

   原 型:extern void gotoxy(int x, int y),功能是将光标移动到指定位置,用法是#include <system.h>。

   功 能:将光标移动到指定位置说明:gotoxy(x,y)将光标移动到指定行x和列y。设置光标到文本屏幕的指定位置,其中参数x,y为文本屏幕的坐标。
   gotoxy(0,0)将光标移动到屏幕左上角。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "conio.h"
#include "windows.h"
void gotoxy(int x, int y)
{
    COORD coord = {x, y};   
    /*COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。其定义为:

    typedef struct _COORD {

    SHORT X; // horizontal coordinate

    SHORT Y; // vertical coordinate
    } COORD;*/

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);//GetStdHandle获取标准输出设备句柄;两个参数分别是指定哪个窗体,具体位置
}

2.clrscr()函数

   功 能:清除文本模式窗口,就是把之前显示出的文字字符去掉。

/*清屏函数*/
#include <stdio.h>
#include <windows.h>
#define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s on line %d\n", __FILE__, GetLastError(), api, __LINE__);}
void MyCls(HANDLE) ;
inline void clrscr(void)
{
	HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
	MyCls(hStdOut);
	return;
}
void MyCls(HANDLE hConsole)
{
	COORD coordScreen={0,0};//设置清屏后光标返回的屏幕左上角坐标
	BOOL bSuccess;
	DWORD cCharsWritten;
	CONSOLE_SCREEN_BUFFER_INFO csbi;//保存缓冲区信息
	DWORD dwConSize;//当前缓冲区可容纳的字符数
	bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
	PERR(bSuccess,"GetConsoleScreenBufferInfo");
	dwConSize=csbi.dwSize.X * csbi.dwSize.Y;//缓冲区容纳字符数目
	//用空格填充缓冲区
	bSuccess=FillConsoleOutputCharacter(hConsole,(TCHAR)' ',dwConSize,coordScreen,&cCharsWritten);
	PERR(bSuccess,"FillConsoleOutputCharacter");
	bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
	PERR(bSuccess,"ConsoleScreenBufferInfo");
	//填充缓冲区属性
	bSuccess=FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,coordScreen,&cCharsWritten);
	PERR(bSuccess,"FillConsoleOutputAttribute");
	//光标返回屏幕左上角坐标
	bSuccess=SetConsoleCursorPosition(hConsole,coordScreen);
	PERR(bSuccess,"SetConsoleCursorPosition");
	return;
}

3.textbackground()函数·

   功 能: 选择新的文本背景颜色

   用 法: void textbackground(int color);

#include <stdio.h>
#include <string.h>
#include "windows.h"
#include "conio.h"

int textbackground(short iColor)
{
    HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO csbInfo;
    GetConsoleScreenBufferInfo(hd, &csbInfo);
    return SetConsoleTextAttribute(hd, (iColor<<4)|(csbInfo.wAttributes&~0xF0));
}

4.综合例子

/*题目:学习 gotoxy()与 clrscr()函数*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include "conio.h"
#include "windows.h"

#define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s on line %d\n", __FILE__, GetLastError(), api, __LINE__);}
void MyCls(HANDLE) ;
inline void clrscr(void)
{
	HANDLE hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
	MyCls(hStdOut);
	return;
}
void MyCls(HANDLE hConsole)
{
	COORD coordScreen={0,0};//设置清屏后光标返回的屏幕左上角坐标
	BOOL bSuccess;
	DWORD cCharsWritten;
	CONSOLE_SCREEN_BUFFER_INFO csbi;//保存缓冲区信息
	DWORD dwConSize;//当前缓冲区可容纳的字符数
	bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
	PERR(bSuccess,"GetConsoleScreenBufferInfo");
	dwConSize=csbi.dwSize.X * csbi.dwSize.Y;//缓冲区容纳字符数目
	//用空格填充缓冲区
	bSuccess=FillConsoleOutputCharacter(hConsole,(TCHAR)' ',dwConSize,coordScreen,&cCharsWritten);
	PERR(bSuccess,"FillConsoleOutputCharacter");
	bSuccess=GetConsoleScreenBufferInfo(hConsole,&csbi);//获得缓冲区信息
	PERR(bSuccess,"ConsoleScreenBufferInfo");
	//填充缓冲区属性
	bSuccess=FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,coordScreen,&cCharsWritten);
	PERR(bSuccess,"FillConsoleOutputAttribute");
	//光标返回屏幕左上角坐标
	bSuccess=SetConsoleCursorPosition(hConsole,coordScreen);
	PERR(bSuccess,"SetConsoleCursorPosition");
	return;
}

int textbackground(short iColor)
{
    HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_SCREEN_BUFFER_INFO csbInfo;
    GetConsoleScreenBufferInfo(hd, &csbInfo);
    return SetConsoleTextAttribute(hd, (iColor<<4)|(csbInfo.wAttributes&~0xF0));
}

void gotoxy(int x, int y)
{
    COORD coord = {x, y};   
    /*COORD是Windows API中定义的一种结构,表示一个字符在控制台屏幕上的坐标。其定义为:

    typedef struct _COORD {

    SHORT X; // horizontal coordinate

    SHORT Y; // vertical coordinate
    } COORD;*/

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);//GetStdHandle获取标准输出设备句柄;两个参数分别是指定哪个窗体,具体位置
}

void main(void)
{
    printf("----------------fdmsaf\r\n");
	clrscr();//system("CLS");/*清屏函数:在VS2010中直接不能调用clrscr,参考网上大神做了以上函数*/
	textbackground(2);
	gotoxy(1, 5);/*定位函数*/
	cprintf("Output at row 5 column 1\n");
	textbackground(3);
	gotoxy(20, 10);
	cprintf("Output at row 10 column 20\n");
	system("pause");
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值