前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/C++常用控制台函数

C/C++常用控制台函数

作者头像
CtrlX
发布2022-09-27 14:56:40
1.1K0
发布2022-09-27 14:56:40
举报
文章被收录于专栏:C++核心编程C++核心编程

C/C++常用控制台函数

前言:包含头文件Windows.h

代码语言:javascript
复制
#include<Windows.h>

需要说明的是,这个头文件包含了大多数win api函数的定义,绝不仅仅只包含控制台api

查看操作控制台的全部可使用API函数

1.修改和获取标题

使用函数:SetConsoleTitleA,GetConsoleTitleA

原型:

代码语言:javascript
复制
BOOL WINAPI SetConsoleTitleA(
  _In_ LPCTSTR lpConsoleTitle //填标题
);

获取原标题:

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
	char buf[0xFF];
	GetConsoleTitleA(buf,0xFF); //获取当前标题
	cout << buf << endl;//输出标题
    
    system("pause");
}
1
1

更换新标题:

方法一:

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
    SetConsoleTitleA("标题"); //设置一个新标题
    
    system("pause");
}
2
2

方法二:使用system函数实现等同效果

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
    system("title 标题"); //设置一个新标题
    
    system("pause");
}
3
3

2.修改控制台大小

这里主要使用两个函数: SetConsoleWindowInfo,SetConsoleScreenBufferSize,还有一个常用函数GetStdHandle

关系: GetStdHandle:获取控制台的句柄(句柄可以理解为控制台的标志,我们可以通过这个标志来找到它,更改它)

SetConsoleScreenBufferSize:设置控制台缓存区的大小,就相当于一个二维数组,控制台显示内容的方式就是将该二维数组的内容映射到屏幕上

SetConsoleWindowInfo:设置控制台大小,必须要小于控制台缓存区的大小(如果控制台比缓存区还大了,那就没东西显示了,很好理解)

原型:

代码语言:javascript
复制
HANDLE WINAPI GetStdHandle(
  _In_ DWORD nStdHandle //获取指定的句柄,输出:STD_OUTPUT_HANDLE,输入:STD_INPUT_HANDLE,错误:STD_ERROR_HANDLE,具体要哪种句柄,看实际需要
);
代码语言:javascript
复制
BOOL WINAPI SetConsoleWindowInfo(
HANDLE     hConsoleOutput,  //标准输出句柄
BOOL       bAbsolute, //是否以全局窗口
SMALL_RECT *lpConsoleWindow //要设置的大小
);
代码语言:javascript
复制
BOOL WINAPI SetConsoleScreenBufferSize(
HANDLE hConsoleOutput, //标准输出句柄
COORD  dwSize //要设置的大小
);

使用:

方法一:

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
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;
}
int main() {
	SetSize(50,40);
}

方法二:使用system函数实现等同效果

代码语言:javascript
复制
system(mode con cols=50 lines=40);
代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;

void SetWindowSize(int cols, int lines)//设置窗口大小
{
    char cmd[30];
    sprintf_s(cmd, "mode con cols=%d lines=%d", cols, lines);
    system(cmd);//system(mode con cols=50 lines=40)设置窗口宽度和高度
}

int main()
{
    SetWindowSize(50, 40);
    
    system("pause");
}

3.显示与隐藏光标,更改光标大小

主要用到的函数为:SetConsoleCursorInfo 但为了不改变其它属性,还用到了:GetConsoleCursorInfo 函数原型:

代码语言:javascript
复制
BOOL WINAPI GetConsoleCursorInfo(
 HANDLE          hConsoleOutput, //标准输出句柄
PCONSOLE_CURSOR_INFO lpConsoleCursorInfo //包含光标信息的结构体
);
代码语言:javascript
复制
BOOL WINAPI SetConsoleCursorInfo(
 HANDLE    hConsoleOutput, //标准输出句柄
CONSOLE_CURSOR_INFO *lpConsoleCursorInfo  //包含光标信息的结构体
);
代码语言:javascript
复制
typedef struct _CONSOLE_CURSOR_INFO {
    DWORD  dwSize; //光标大小 值可取1-100之间
    BOOL   bVisible; //光标是否可见
} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;

如果只想隐藏或显示光标,则,先获取现有光标的属性,然后将是否显示光标的属性bVisible更改,最后再设置回去

当然如果都想更改,可不调用GetConsoleCursorInfo函数.手动设置dwSize和bVisible然后传入SetConsoleCursorInfo函数

使用:

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
	HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO cInfo{};
	GetConsoleCursorInfo(hOutput, &cInfo); //获取现有光标信息
	cInfo.bVisible = false; //false为隐藏窗口,true为显示窗口
	SetConsoleCursorInfo(hOutput, &cInfo);  //重新设置光标信息
    
    system("pause");
}

4.改变光标位置

这个很简单,用到一个API函数:SetConsoleCursorPosition 原型:

代码语言:javascript
复制
BOOL WINAPI SetConsoleCursorPosition(
HANDLE hConsoleOutput, //标准输出句柄
COORD  dwCursorPosition //要设置的位置信息
);

使用:

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
	HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD coo;
	coo.X = 10;
	coo.Y = 10;
	SetConsoleCursorPosition(hOutput, coo);
}

5.禁止更改窗口大小,最小化,最大化

这里用到了三个函数: GetWindowLongPtrASetWindowLongPtrAGetConsoleWindow

代码语言:javascript
复制
HWND GetConsoleWindow();//返回控制台窗口的句柄
代码语言:javascript
复制
LONG_PTR GetWindowLongPtrA(
HWND hWnd, //窗口句柄
int  nIndex //要获取的窗口属性类别,这里我们需要窗口样式GWL_STYLE
);
代码语言:javascript
复制
LONG_PTR SetWindowLongPtrA(
  [in] HWND     hWnd, //窗口句柄
  [in] int      nIndex,//要设置的窗口属性类别,这里我们需要设置窗口样式GWL_STYLE
  [in] LONG_PTR dwNewLong //要设置的值
);

逻辑: 先获取控制台窗口样式,然后去除掉可更改,可最大,可最小化的属性,然后再设置回去

代码:

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
	HWND hWnd=GetConsoleWindow(); //获取窗口句柄
	LONG_PTR sty=GetWindowLongPtrA(hWnd, GWL_STYLE); //获取窗口样式
	sty = sty & ~WS_SIZEBOX & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX; //去除可变化大小,最大,最小化按钮,~是取反,&是与,这是位运算相关的知识了
	SetWindowLongPtrA(hWnd, GWL_STYLE, sty); //设置窗体不可更改大小,不可最大化
}

6.改变字体颜色

使用到一个函数:SetConsoleTextAttribute 函数原型:

代码语言:javascript
复制
BOOL WINAPI SetConsoleTextAttribute(
HANDLE hConsoleOutput, //标准输出句柄
WORD   wAttributes //要设置的文本属性,包括字体颜色,字体背景颜色等属性
);

可选择属性,用 | 符号组合

hsu
hsu

使用:

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
	HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出句柄
	SetConsoleTextAttribute(hOutput,FOREGROUND_BLUE|BACKGROUND_GREEN|COMMON_LVB_UNDERSCORE); //设置文本颜色蓝色,背景色绿色,有下划线
	cout << "this is a test!";
}

7.改变字体

NULL

8.改变背景颜色

官方文档中,我没有找到可以改变整个窗口背景颜色的API,但是可以采用批处理命令实现

该方法可同时改变背景色和文字颜色

官方文档:

ddd
ddd

使用:

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
	system("color 0C"); //设置背景为黑色,字体为淡红色
	cout << "this is a test!";
}

9.分离当前控制台

使用FreeConsole函数即可

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
	FreeConsole();
	cout << "this is a test!";
}

当使用了该函数,所有输出结果就接收不到了。

10.分配一个控制台

这时就可以使用:AllocConsole,重新分配一个控制台

代码语言:javascript
复制
#include<Windows.h>
#include<iostream>
using namespace std;
int main() {
	FreeConsole(); //分离原有的控制台
	cout << "this is a test";
	AllocConsole(); //分配一个新的控制台
	cout << "this is a test llllllllllllllll";
}

此时又出现了一个新的控制台,并将结果输出到了新控制台上

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C/C++常用控制台函数
    • 1.修改和获取标题
      • 2.修改控制台大小
        • 3.显示与隐藏光标,更改光标大小
          • 4.改变光标位置
            • 5.禁止更改窗口大小,最小化,最大化
              • 6.改变字体颜色
                • 7.改变字体
                  • 8.改变背景颜色
                    • 9.分离当前控制台
                      • 10.分配一个控制台
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档