slacr_

Just to record my life and thoughts.
笔记/编程/杂乱/极简

[Win]Console控制台api

May 26, 2023Win574 words in 4 min

记些 windows 控制台 api

SetConsoleTextAttribute()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <windows.h>
using namespace std;

int main() {
// WINBASEAPI
// BOOL
// WINAPI
// SetConsoleTextAttribute(
// _In_ HANDLE hConsoleOutput,
// _In_ WORD wAttributes
// );
// 更改文字颜色
HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄
SetConsoleTextAttribute(consoleHandle, FOREGROUND_INTENSITY | FOREGROUND_RED); // FOREGROUND_INTENSITY 指定是否强调
cout << "这是加强的红色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, FOREGROUND_RED);
cout << "这是不加强的红色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, FOREGROUND_INTENSITY | FOREGROUND_GREEN); // 进行按位或运算
cout << "这是绿色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, FOREGROUND_INTENSITY | FOREGROUND_BLUE);
cout << "这是蓝色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
cout << "这是黄色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
cout << "这是洋红色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "这是青色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); // 默认白文本
cout << "这是白色的文本" << endl;
cout << "==================================" << endl;
// 更改背景颜色
SetConsoleTextAttribute(consoleHandle, BACKGROUND_RED | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cout << "这是红色的背景,白色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, BACKGROUND_INTENSITY | BACKGROUND_GREEN);
cout << "这是绿色的背景,黑色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, BACKGROUND_INTENSITY | BACKGROUND_BLUE);
cout << "这是蓝色的背景,黑色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN);
cout << "这是黄色的背景,黑色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE);
cout << "这是洋红色的背景,黑色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, BACKGROUND_INTENSITY | BACKGROUND_GREEN | BACKGROUND_BLUE);
cout << "这是青色的背景,黑色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
cout << "这是白色的背景,黑色的文本" << endl;
SetConsoleTextAttribute(consoleHandle, 0); // 默认黑色背景

return 0;
}

_getch() _getwch()

定义再<conio.h> 类似getchar, 但在不回显字符的情况下读取输入。
_getch 和 _getwch 函数从不回显字符的控制台读取单个字符。 若要读取函数键或箭头键,必须调用每个函数两次。 第一个调用返回 0 或 0xE0。 第二次调用返回键扫描代码。
https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/reference/getch-getwch?view=msvc-170
Key Scan Codes
https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-6.0/aa299374(v=vs.60)

SetConsoleCursorPosition()

得到光标坐标

1
2
3
4
BOOL WINAPI SetConsoleCursorPosition(
_In_ HANDLE hConsoleOutput,
_In_ COORD dwCursorPosition
);

写了个井字棋
https://github.com/s1acr/TicTacToc

参考

  1. Windows官方中文文档
  2. 【C++】Windows控制台API基本使用(上)
  • Author:

    slacr_

  • Copyright:

  • Published:

    May 26, 2023

  • Updated:

    May 26, 2023

Buy me a cup of coffee ☕.

1000000