C++控制台的那些【高级操作】(全)

目录

一、光标

1、隐藏光标

2、获取光标位置

3、移动光标

二、窗口大小

1、调整大小

2、固定大小

三、颜色

1、cmd 命令颜色

2、windows.h 颜色

3、wprintf 颜色

四、控制台

1、标题

2、分离

3、分配新窗口


学习C++刚不久的小萌新,经常会写亿些 控制台上神奇的小游戏

但是,控制台作为一个黑窗口,固然没有其他UI窗口那么灵活,

所以,这里将介绍用控制台做游戏的必备操作!

本篇文章全程需要:Windows.h 头文件

一、光标

1、隐藏光标

如果打游戏时有一个光标在屏幕上闪来闪去,总是会影响游戏体验欸!

void HideCursor()
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}

2、获取光标位置

作者觉得这个指令不是很常用,备用吧。

函数返回 COORD 类型的指针位置,用 .x .y 获取 x y 坐标

COORD GetCursorPos()
{
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_SCREEN_BUFFER_INFO bInfo;
	GetConsoleScreenBufferInfo(hOut, &bInfo);
	return bInfo.dwCursorPosition;
}

3、移动光标

重要的事情说三遍!非常重要!!!非常重要!!!非常重要!!!

参数分别是目标位置的 x y 坐标

void gotoxy(int x, int y)
{
	HANDLE hout;
	COORD pos;
	pos.X = x;
	pos.Y = y;
	hout = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hout, pos);
} 

二、窗口大小

1、调整大小

作为一个像样的游戏窗口总有一个合适的大小,不可能用控制台默认的奇怪的大小。

参数分别为窗口行列的数量

void setsize(int col, int row)
{
	char cmd[64];
	sprintf(cmd, "mode con cols=%d lines=%d", col, row);
	system(cmd);
}

2、固定大小

调完大小,会发现一个问题:有些不听话的玩家会自行调整窗口大小,于是我们就要固定窗口大小,禁止玩家调整。

这是一行非—————常—————长的代码,直接抄就行了,禁止用户最大化、调整大小

SetWindowLongPtrA(GetConsoleWindow(), GWL_STYLE, GetWindowLongPtrA(GetConsoleWindow(),GWL_STYLE)& ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);

三、颜色

1、cmd 命令颜色

第一种改变输出颜色的方法,就是利用cmd命令改变全部颜色,并不常用。

改变箭头处的数字,得到不同的颜色

system("color 1");
              ^

2、windows.h 颜色

第二种改变输出颜色的方法,反正就是亿堆函数、结构体。颜色有限,不是最佳。

具体用法参考:C++ 设置控制台字体主题,颜色和背景颜色_爱学习的蓝调的博客-CSDN博客_setconsolecolor

void color(int fore, int back)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), (back << 4) + fore);
}

3、wprintf 颜色

第三种改变输出颜色的方法,直接用 RGB 颜色,非常好用!

需额外包含头文件:wchar.h

前面6行代码不可删去!!!

具体说明参考:https://blog.csdn.net/heveral/article/details/121220483?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167446686616800180695447%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167446686616800180695447&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-121220483-null-null.blog_rank_default&utm_term=C%2B%2B%20wprintf&spm=1018.2226.3001.4450

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut == INVALID_HANDLE_VALUE) return GetLastError();
DWORD dwMode = 0;
if (!GetConsoleMode(hOut, &dwMode)) return GetLastError();
dwMode |= 0x0004;
if (!SetConsoleMode(hOut, dwMode)) return GetLastError();
wprintf(L"\x1b[38;2;%d;%d;%dmHelloworld", 0, 0, 200);

四、控制台

1、标题

控制台默认的标题是exe程序的文件路径,非常扎眼,所以要改一改

箭头处的字符串更改为标题即可

SetConsoleTitle("title");
                 ^^^^^

2、分离

FreeConsole();

3、分配新窗口

AllocConsole();

当然,这只是部分操作,或者说是“基础操作”。那就说到这里吧!

你可能感兴趣的:(C++,c++)