如何让光标返回上一行c语言,C++ 怎么让光标返回上一行

C/C++ code#include

#include

void ConPrint(char *CharBuffer, int len);

void ConPrintAt(int x, int y, char *CharBuffer, int len);

void gotoXY(int x, int y);

void ClearConsole(void);

void ClearConsoleToColors(int ForgC, int BackC);

void SetColorAndBackground(int ForgC, int BackC);

void SetColor(int ForgC);

void HideTheCursor(void);

void ShowTheCursor(void);

int main(int argc, char* argv[])

{

HideTheCursor();

ClearConsoleToColors(15, 1);

ClearConsole();

gotoXY(1, 1);

SetColor(14);

printf("This is a test...\n");

Sleep(500);

ShowTheCursor();

SetColorAndBackground(15, 12);

ConPrint("This is also a test...\n", 23);

SetColorAndBackground(1, 7);

ConPrintAt(22, 15, "This is also a test...\n", 23);

gotoXY(0, 24);

SetColorAndBackground(7, 1);

return 0;

}

//This will clear the console while setting the forground and

//background colors.

void ClearConsoleToColors(int ForgC, int BackC)

{

WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);

//Get the handle to the current output buffer...

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

//This is used to reset the carat/cursor to the top left.

COORD coord = {0, 0};

//A return value... indicating how many chars were written

//not used but we need to capture this since it will be

//written anyway (passing NULL causes an access violation).

DWORD count;

//This is a structure containing all of the console info

// it is used here to find the size of the console.

CONSOLE_SCREEN_BUFFER_INFO csbi;

//Here we will set the current color

SetConsoleTextAttribute(hStdOut, wColor);

if(GetConsoleScreenBufferInfo(hStdOut, &csbi))

{

//This fills the buffer with a given character (in this case 32=space).

FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

//This will set our cursor position for the next print statement.

SetConsoleCursorPosition(hStdOut, coord);

}

}

//This will clear the console.

void ClearConsole()

{

//Get the handle to the current output buffer...

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

//This is used to reset the carat/cursor to the top left.

COORD coord = {0, 0};

//A return value... indicating how many chars were written

// not used but we need to capture this since it will be

// written anyway (passing NULL causes an access violation).

DWORD count;

//This is a structure containing all of the console info

// it is used here to find the size of the console.

CONSOLE_SCREEN_BUFFER_INFO csbi;

//Here we will set the current color

if(GetConsoleScreenBufferInfo(hStdOut, &csbi))

{

//This fills the buffer with a given character (in this case 32=space).

FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

//This will set our cursor position for the next print statement.

SetConsoleCursorPosition(hStdOut, coord);

}

}

//This will set the position of the cursor

void gotoXY(int x, int y)

{

//Initialize the coordinates

COORD coord = {x, y};

//Set the position

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

//This will set the forground color for printing in a console window.

void SetColor(int ForgC)

{

WORD wColor;

//We will need this handle to get the current background attribute

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

CONSOLE_SCREEN_BUFFER_INFO csbi;

//We use csbi for the wAttributes word.

if(GetConsoleScreenBufferInfo(hStdOut, &csbi))

{

//Mask out all but the background attribute, and add in the forgournd color

wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F);

SetConsoleTextAttribute(hStdOut, wColor);

}

}

//This will set the forground and background color for printing in a console window.

void SetColorAndBackground(int ForgC, int BackC)

{

WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);;

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);

}

//Direct console output

void ConPrint(char *CharBuffer, int len)

{

DWORD count;

WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), CharBuffer, len, &count, NULL);

}

//Direct Console output at a particular coordinate.

void ConPrintAt(int x, int y, char *CharBuffer, int len)

{

DWORD count;

COORD coord = {x, y};

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(hStdOut, coord);

WriteConsole(hStdOut, CharBuffer, len, &count, NULL);

}

//Hides the console cursor

void HideTheCursor()

{

CONSOLE_CURSOR_INFO cciCursor;

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

if(GetConsoleCursorInfo(hStdOut, &cciCursor))

{

cciCursor.bVisible = FALSE;

}

}

//Shows the console cursor

void ShowTheCursor()

{

CONSOLE_CURSOR_INFO cciCursor;

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

if(GetConsoleCursorInfo(hStdOut, &cciCursor))

{

cciCursor.bVisible = TRUE;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值