工具函数
system 函数
system()
函数是 C++ 标准库中的一个函数,用于执行系统命令。
调用操作系统的命令行或 shell 来执行指定的命令。
system("title XXX")
- 功能:修改终端窗口标题为
XXX
。
system("title Game");
system("mode con cols=XX lines=YY")
- 功能:修改终端窗口大小为
YY
行XX
列。
system("mode con cols=60 lines=30");
system("cls")
- 功能:清空整个终端。
system("cls");
Windows API
Windows API 是微软提供的一套用于与 Windows 操作系统进行交互的编程接口,允许开发者通过 C++ 语言访问和操作操作系统的底层功能,如窗口管理、文件操作、网络通信等。
gotoxy(short x,short y)
功能:设置控制台光标的位置为 y
行 x
列。
void gotoxy(short x,short y)
{
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),{x,y});
}
hideCursor()
- 功能:隐藏控制台中的光标。
void hideCursor()
{
CONSOLE_CURSOR_INFO cursor_info={1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
disableQuickEditMode()
- 功能:禁用快速编辑模式。
void disableQuickEditMode()
{
HANDLE hInput=GetStdHandle(STD_INPUT_HANDLE);
DWORD prevMode;
GetConsoleMode(hInput,&prevMode);
prevMode&=~ENABLE_QUICK_EDIT_MODE;
prevMode&=~ENABLE_INSERT_MODE;
prevMode&=~ENABLE_MOUSE_INPUT;
SetConsoleMode(hInput,prevMode);
}
windowPos()
- 功能:获取鼠标指针在控制台的相对位置。
POINT windowPos()
{
POINT pt;
GetCursorPos(&pt);
ScreenToClient(GetConsoleWindow(),&pt);
return pt;
}
moveConsoleWindow(int x,int y)
功能:将控制台窗口移动 x
和 y
个单位。
void moveConsoleWindow(int x,int y)
{
HWND consoleWindow=GetConsoleWindow();
RECT rect;
GetWindowRect(consoleWindow,&rect);
int w=rect.right-rect.left,h=rect.bottom-rect.top;
MoveWindow(consoleWindow,rect.left+x,rect.top+y,w,h,TRUE);
}
centerConsoleWindow()
- 功能:将控制台窗口居中显示在屏幕上。
void centerConsoleWindow()
{
HWND consoleWindow=GetConsoleWindow();
RECT rect;
GetWindowRect(consoleWindow,&rect);
int w=rect.right-rect.left,h=rect.bottom-rect.top;
int x=GetSystemMetrics(SM_CXSCREEN)-w>>1;
int y=GetSystemMetrics(SM_CYSCREEN)-h>>1;
MoveWindow(consoleWindow,x,y,w,h,TRUE);
}
按键检测
KEY_DOWN(VK_NONAME)
- 功能:检测某个按键是否被按下。
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)
颜色
终端不仅只有黑白的显示,还可以支持多种颜色。
system 函数
通过 system("color XY")
,可以设置终端文本的前景色和背景色。
其中,X 代表前景色,Y 代表背景色,它们都是十六进制数字(),每个数字对应一种颜色。
数字 | 颜色 | 数值 | 数字 | 颜色 | 数值 |
---|---|---|---|---|---|
黑色 | 灰色 | ||||
蓝色 | 亮蓝色 | ||||
绿色 | 亮绿色 | ||||
青色 | 亮青色 | ||||
红色 | 亮红色 | ||||
紫色 | 亮紫色 | ||||
黄色 | 亮黄色 | ||||
白色 | 亮白色 |
system
函数的缺点是只能修改整个终端的颜色,无法仅修改特定部分的文字颜色。
Windows API
如果你需要只修改某一段文字的颜色,可以使用 Windows API 来实现。
定义一个 color
函数,传入两个参数 a
和 b
,表示前景色和背景色的颜色编号,对应的颜色与 system
函数相同。
void color(short a,short b)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a<<4|b);
}
Windows API 的缺点是颜色种类有限(只有 种)。
ANSI 转义序列
ANSI 转义序列支持 24 位真彩色,也就是常见的 RGB 颜色格式。
但此功能默认未开启,需启用虚拟终端处理。
void enableVirtualTerminalProcessing()
{
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwMode=0;
GetConsoleMode(hConsole,&dwMode);
dwMode|=ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(hConsole,dwMode);
}
定义两个 color
函数,传入三个参数 r
、g
和 b
,表示 RGB 颜色值。
void foreColor(int r,int g,int b)
{
printf("\033[38;2;%d;%d;%dm",r,g,b);
}
void backColor(int r,int g,int b)
{
printf("\033[48;2;%d;%d;%dm",r,g,b);
}