【C语言】- 设置控制台标题、编码、文字颜色、大小和字体
C语言设置控制台字体和大小
【C语言】- 设置控制台标题、编码、文字大小、字体和颜色
文章目录
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();
}
效果如图:
2 - 设置控制台编码
若控制台输出中文为乱码,则可以使用 SetConsoleOutputCP 设置控制台输出代码页
BOOL WINAPI SetConsoleOutputCP(_In_ UINT wCodePageID);
CP 表示 Code Page 代码页,GBK 为 936, UTF-8 为 65001。
更多内容 参见 Microsoft 官网 SetConsoleOutputCP
设置示例
SetConsoleOutputCP(65001);
3 - 设置控制台字体和大小
设置控制台字体和大小,首先需要获取控制台句柄
HANDLE WINAPI GetStdHandle(_In_ DWORD nStdHandle);
控制台输出句柄需要设置参数 STD_OUTPUT_HANDLE
参见官网 GetStdHandle
设置需要调用
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);
}
更多内容,参见官网 SetCurrentConsoleFontEX 与 CONSOLE_FONT_INFOEX
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");
效果如图:
更多内容,可以通过 cmd 命令行查看帮助
color /?
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;
}
效果如图
更多内容参考官网 SetConsoleTextAttribute
颜色也可以不使用预制的定义,也可以使用全局颜色定义的十六进制数,如 0xcf
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0xcf);
参考链接
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)