[C++]常用的windows控制台操作
一些常用的控制台操作!
注意:该文章全程需要:Windows.h 头文件,因为使用了Windows的API
一、光标
1. 隐藏光标
void HideCursor(){ CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); }
2. 移动光标
代码中的参数:
- x x坐标
- y 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); }
不知道什么时候,这里多了一些奇怪的符号:WEdCezBCbVl4NGtVNG9+X3drRlJXUSxOfQ==
二、窗口大小
1. 调整大小
自定义窗口大小可以带来更好的体验!
代码中的参数:
- col
- row 行数
其实就是高和宽
下面是Windows10系统的写法
void setsize(int col, int row){ char cmd[64]; sprintf(cmd, "mode con cols=%d lines=%d", col, row); system(cmd); }
或者使用Windows API的写法
bool SetSize(int width, int height) { HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); //获取输出句柄 SMALL_RECT wrt = { 0, 0, width - 1, height - 1 }; //设置宽高 bool ret = SetConsoleWindowInfo(hOutput, TRUE, &wrt); // 设置窗体尺寸 if (!ret) return false; COORD coord = { width, height }; ret = SetConsoleScreenBufferSize(hOutput, coord); // 设置缓冲尺寸 return ret; }
上面的方法在Win10可以使用,但是在Win11系统失效了,如果想要在Win11系统下修改窗口大小,可以手动修改终端设置实现,但是!!
我们是为了在程序运行的时候能够自行修改窗口大小,怎么能让用户修改呢。
于是经过一番查找,发现了一个Windows的API可以实现修改窗口大小的操作————SetWindowPos
代码如下:
void setsize(int col,int row){ HWND hwnd = GetConsoleWindow(); Sleep(10);//如果在程序启动后立即执行这些代码,则必须在此处等待一小段时间,否则 GetWindow 将失败。我推测可能是因为控制台尚未完全初始化,若非开始时调用可以忽略此处。 HWND owner = GetWindow(hwnd,GW_OWNER); if (owner == NULL) { // Windows 10 SetWindowPos(hwnd, nullptr, 0, 0, col, row, SWP_NOZORDER | SWP_NOMOVE); } else { // Windows 11 SetWindowPos(owner, nullptr, 0, 0, col, row, SWP_NOZORDER | SWP_NOMOVE); } }
上面代码同时兼顾了Win10和Win11,推荐此写法。
这些代码不需要记忆,直接使用即可,参数和上面的一样。
同时,我们也可以利用它写一个全屏的函数
void full_screen() { HWND hwnd = GetForegroundWindow(); int cx = GetSystemMetrics(SM_CXSCREEN); /* 屏幕宽度 像素 */ int cy = GetSystemMetrics(SM_CYSCREEN); /* 屏幕高度 像素 */ LONG l_WinStyle = GetWindowLong(hwnd, GWL_STYLE); /* 获取窗口信息 */ /* 设置窗口信息 最大化 取消标题栏及边框 */ SetWindowLong(hwnd, GWL_STYLE, (l_WinStyle | WS_POPUP | WS_MAXIMIZE) & ~WS_CAPTION & ~WS_THICKFRAME & ~WS_BORDER); SetWindowPos(hwnd, HWND_TOP, 0, 0, cx, cy, 0); }
2、固定大小
当然,为了防止用户自己改变窗口大小,所以我们还需要固定窗口大小
HWND hWnd = GetConsoleWindow(); //获取窗口句柄 LONG_PTR sty = GetWindowLongPtrA(hWnd, GWL_STYLE); //获取窗口样式 sty = sty & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX; //去除可变化大小,最大,最小化按钮,~是取反,&是与,这是位运算相关的知识了 SetWindowLongPtrA(hWnd, GWL_STYLE, sty); //设置窗体不可更改大小,不可最大化
或者直接写为一句代码(
SetWindowLongPtrA(GetConsoleWindow(), GWL_STYLE, GetWindowLongPtrA(GetConsoleWindow(),GWL_STYLE)& ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX);
可惜Win11用不了......,目前只看到有一种办法就是更改windows的终端,未发现其他固定控制台大小的方法。
三、颜色
1. cmd 命令
第一种改变输出颜色的方法,就是利用cmd命令改变全部颜色
color 后面的参数就是要修改的颜色
system("color a"); ^
部分参数
值 | 颜色 |
---|---|
0 | 黑色 |
1 | 蓝色 |
2 | 绿色 |
3 | Aqua |
4 | 红色 |
5 | 紫色 |
6 | 黄色 |
7 | 白色 |
8 | 灰色 |
9 | 淡蓝色 |
a | 浅绿色 |
b | 淡蓝绿色 |
c | 淡红色 |
d | 淡紫色 |
e | 淡黄色 |
F | 亮白色 |
2. 直接printf颜色
这种方法虽然格式不是很好写,但是如果我们封装为函数就非常方便,并且因为printf输出,可以实现局部颜色改变,做控制台游戏的应该知道这有多重要hh(
void printf_red(const char *s) { printf("\033[0m\033[1;31m%s\033[0m", s); } void printf_green(const char *s) { printf("\033[0m\033[1;32m%s\033[0m", s); } void printf_yellow(const char *s) { printf("\033[0m\033[1;33m%s\033[0m", s); } //...... void printf_cyan(const char *s) { printf("\033[0m\033[1;36m%s\033[0m", s); }
具体参考该文章
四、控制台
1. 标题
把下面的title改为想要的标题即可
SetConsoleTitle("title");
或者使用Windows的API更改标题
SetConsoleTitleA("test");
先记录这些,有用到的再继续更新。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南