本文最后更新于:2019年10月12日 下午
学了很久C语言,每次运行程序看到的都是小黑框,是否感到无聊呢?
当你学会下面的函数后,你就可以让小黑框随意的改变颜色。
必要的一些说明
肯定需要windows.h头文件
HANDLE 是windows句柄,一个windows部件对应的id
COORD是一个坐标的结构体,里面有x和y
gotoxy
1 2 3 4 5 6
| void gotoxy(int x, int y) { COORD pos = {x, y}; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos); }
|
隐藏控制台光标
1 2 3 4 5 6 7 8
| void hideCursor() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO CursorInfo; GetConsoleCursorInfo(handle, &CursorInfo); CursorInfo.bVisible = false; SetConsoleCursorInfo(handle, &CursorInfo); }
|
显示控制台光标
1 2 3 4 5 6 7 8
| void showCursor() { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO CursorInfo; GetConsoleCursorInfo(handle, &CursorInfo); CursorInfo.bVisible = true; SetConsoleCursorInfo(handle, &CursorInfo); }
|
设置窗口标题
1 2 3 4
| void setTitle(char *title) { SetConsoleTitle(title); }
|
获取窗口标题
1 2 3 4 5 6
| char* getTitle() { char strTitle[255]; GetConsoleTitle(strTitle, 255); return strTitle; }
|
获取控制台窗口大小
1 2 3 4 5 6 7
| COORD getScreenSize() { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO bInfo; GetConsoleScreenBufferInfo(hOut, &bInfo); return bInfo.dwSize; }
|
设置控制台窗口大小
1 2 3 4 5 6 7 8 9
| void setScreenSize(int x, int y) { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); COORD size = {x, y}; SetConsoleScreenBufferSize(hOut, size); SMALL_RECT rc = {0, 0, x - 1, y - 1}; SetConsoleWindowInfo(hOut, true, &rc); SetConsoleScreenBufferSize(hOut, size); }
|
禁止改变窗口大小
1 2 3 4 5 6 7 8 9 10 11 12
| void forbidChengeScreenSize() { char strTitle[255]; GetConsoleTitle(strTitle, 255); HWND hWnd = FindWindow(NULL, strTitle); RECT rc; GetWindowRect(hWnd, &rc); SetWindowLongPtr(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX); SetWindowPos(hWnd, NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, NULL); }
|
一些例子
带颜色的格式化输出
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include <stdio.h> #include <Windows.h> #include <assert.h>
void gotoxy(int x, int y) { COORD pos = {x, y}; HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos); }
void colorPrintf(int color, char *str,...) { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hOut, color); int i = 0; int x = 0; char *pstr = NULL; va_list arg; va_start(arg,str); assert(str); while (*str) { if(*str == '%') { str++; switch(*str) { case 's': pstr = va_arg(arg,char*); printf("%s", pstr); break; case 'c': x = va_arg(arg,int); putchar(x); break; case 'd': x = va_arg(arg, int); printf("%d", x); break; default: putchar(*(str-1)); putchar(*str); break; } str++; } else { putchar(*str); str++; } } va_end(arg); SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN); } int main() { for(int i = 1; i < 16; i++) { gotoxy(i * 2, i); colorPrintf(i, "□这是第%d句带颜色的字符串■\n", i); } return 0; }
|
在输出字符的时候控制台会