C++之光标控制

#include<conio.h>
#include<Windows.h>
#include<iostream>
using namespace std;

#define ESC 0X1B
#define HIGH 0XE0
#define UP 0X48//72
#define LEFT 0X4B//75
#define RIGHT 0X4D//77
#define DOWN 0X50//80

COORD getxy();
void gotoxy(const COORD&);
void hideCursor();

void moveUp();
void moveLeft();
void moveRight();
void moveDown();


int main()
{
	//按上下左右方向键绘图
	hideCursor();
	int ch = 1;
	while ((ch = _getch()) != ESC)     
	{
		if (ch == HIGH)
		{
			ch = _getch();
			switch (ch)
			{
			case UP:
				moveUp();
				cout << ".";
				break;
			case LEFT:
				moveLeft();
				cout << ".";
				break;
			case RIGHT:
				moveRight();
				cout << ".";
				break;
			case DOWN:
				moveDown();
				cout << ".";
			}
			moveLeft();//每一次cout<<".";光标都会向右移,所以最终还要再向左移一次
		}
	}
}

COORD getxy()
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_SCREEN_BUFFER_INFO csbi;
	GetConsoleScreenBufferInfo(handle, &csbi);
	COORD coord;
	coord.X = csbi.dwCursorPosition.X;
	coord.Y = csbi.dwCursorPosition.Y;
	return coord;
}

void gotoxy(const COORD& coord)
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(handle, coord);
}

void hideCursor()
{	
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO cci;
	GetConsoleCursorInfo(handle, &cci);
	cci.bVisible = false;
	SetConsoleCursorInfo(handle, &cci);
}

void moveUp()
{
	COORD coord;
	coord = getxy();
	coord.Y--;
	gotoxy(coord);
}

void moveLeft()
{
	COORD coord;
	coord = getxy();
	coord.X--;
	gotoxy(coord);
}

void moveRight()
{
	COORD coord;
	coord = getxy();
	coord.X++;
	gotoxy(coord);
}

void moveDown()
{
	COORD coord;
	coord = getxy();
	coord.Y++;
	gotoxy(coord);
}

发布了5 篇原创文章 · 获赞 0 · 访问量 3090

猜你喜欢

转载自blog.csdn.net/NONElgh/article/details/72782494