【C语言】- 设置控制台标题、编码、文字大小、字体和颜色

文章目录

  • 【C语言】- 设置控制台标题、编码、文字大小、字体和颜色
  • 1 - 设置控制台标题
  • 2 - 设置控制台编码
  • 3 - 设置控制台字体和大小
  • 4 - 设置控制台文字颜色
  • 4.1 - 全局颜色
  • 4.2 - 局部颜色

1 - 设置控制台标题

因为要用到 Windows API,所以需要包含头文件 Windows.h

#include <Windows.h>

// 标题设置声明
BOOL WINAPI SetConsoleTitle(_In_ LPCTSTR lpConsoleTitle);

调用示例

#include <Windows.h>

int main(int argc, char* argv[])
{
	// 字符串常量 前面加上 L 会转换成宽字符 wchar_t*
	SetConsoleTitle(L"控制台应用测试");
	
	// 防止控制台退出
	system("pause");
	// 防止控制台退出 也可以使用 
	getchar();
}

效果如图:

r语言怎么设置图片大小和字体大小_c语言

2 - 设置控制台编码

若控制台输出中文为乱码,则可以使用 SetConsoleOutputCP 设置控制台输出代码页

BOOL WINAPI SetConsoleOutputCP(_In_ UINT wCodePageID);

CP 表示 Code Page 代码页,GBK 为 936, UTF-8 为 65001。

设置示例

SetConsoleOutputCP(65001);

3 - 设置控制台字体和大小

设置控制台字体和大小,首先需要获取控制台句柄

HANDLE WINAPI GetStdHandle(_In_ DWORD nStdHandle);

控制台输出句柄需要设置参数 STD_OUTPUT_HANDLE 参见官网

设置需要调用

BOOL WINAPI SetCurrentConsoleFontEx(
  _In_ HANDLE               hConsoleOutput, // 控制台屏幕缓冲区的句柄
  _In_ BOOL                 bMaximumWindow, // 是否设置窗体最大化的字体,FALSE 设置当前的字体信息
  _In_ PCONSOLE_FONT_INFOEX lpConsoleCurrentFontEx // 字体信息结构体指针,见下方 配置结构体
);

配置结构体示例

CONSOLE_FONT_INFOEX fontInfo;
fontInfo.cbSize = sizeof(fontInfo); // 结构体的大小
fontInfo.nFont = 0; // 系统控制台字体表中字体的索引
fontInfo.dwFontSize.X = 0;  // 字高
fontInfo.dwFontSize.Y = 20; // 字宽
fontInfo.FontFamily = FF_DONTCARE; // 字体间距和系列
fontInfo.FontWeight = FW_NORMAL; // 粗细
wcscpy_s(fontInfo.FaceName, L"Consolas"); // 字样的名称

获取句柄与设置示例

HANDLE handle;
if ((handle= GetStdHandle(STD_OUTPUT_HANDLE)) != INVALID_HANDLE_VALUE)
{
	SetCurrentConsoleFontEx(handle, FALSE, &fontInfo);
}

4 - 设置控制台文字颜色

4.1 - 全局颜色

可以设置全局的颜色通过 windows 的系统调用, system 命令行 调用 color 命令,格式 color xx,color + 两位十六进制数 ,两位数字中第一个数字为背景色,第二个数字为前景色(即文字颜色)

数字

对应颜色

0

黑色

1

蓝色

2

绿色

3

浅绿色

4

红色

5

紫色

6

黄色

7

白色

8

灰色

9

淡蓝色

A

淡绿色

B

淡浅绿色

C

淡红色

D

淡紫色

E

淡黄色

F

亮白色

调用示例,背景色红色(c),前景色亮白色(f)

system("color cf");

效果如图:

r语言怎么设置图片大小和字体大小_r语言怎么设置图片大小和字体大小_02

更多内容,可以通过 cmd 命令行查看帮助

color /?

r语言怎么设置图片大小和字体大小_开发语言_03

4.2 - 局部颜色

以上操作,会修改整个命令行的颜色,如果只修改局部的颜色则需要使用 SetConsoleTextAttribute

BOOL WINAPI SetConsoleTextAttribute(
  _In_ HANDLE hConsoleOutput, // 控制台句柄
  _In_ WORD   wAttributes // 颜色
);

控制台句柄获取与第三小节相同,颜色在 WinCon.h 中定义,

属性

说明

FOREGROUND_BLUE

文本颜色包含蓝色

FOREGROUND_GREEN

文本颜色包含绿色

FOREGROUND_RED

文本颜色包含红色

FOREGROUND_INTENSITY

文本颜色增强

BACKGROUND_BLUE

背景色包含蓝色

BACKGROUND_GREEN

背景色包含绿色

BACKGROUND_RED

背景色包含红色

BACKGROUND_INTENSITY

背景色增强

多种颜色可以通过或符号 (|) 叠加

代码示例:模拟 linux 控制台

int main(int argc, char* argv[])
{
	SetConsoleTitle(L"测试控制台颜色");
	printf("test console color\n");
	// 设置之后的文本为 蓝色
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
		FOREGROUND_BLUE | FOREGROUND_INTENSITY); // 亮蓝色
	printf("[user@localhost /bin]$");
	// 还原文本颜色为 白色
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
		FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); //rgb都有 即为白色
	printf("ls -al /");

	return 0;
}

效果如图

在这里插入图片描
述

颜色也可以不使用预制的定义,也可以使用全局颜色定义的十六进制数,如 0xcf

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0xcf);