ฉันจะเขียนข้อความสีลงในคอนโซลด้วย C ++ ได้อย่างไร นั่นคือฉันจะเขียนข้อความที่แตกต่างกันด้วยสีที่ต่างกันได้อย่างไร
ฉันจะเขียนข้อความสีลงในคอนโซลด้วย C ++ ได้อย่างไร นั่นคือฉันจะเขียนข้อความที่แตกต่างกันด้วยสีที่ต่างกันได้อย่างไร
คำตอบ:
เพิ่มสีเล็กน้อยให้กับข้อความคอนโซลของคุณ
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
// you can loop k higher to see more color choices
for(int k = 1; k < 255; k++)
{
// pick the colorattribute k you want
SetConsoleTextAttribute(hConsole, k);
cout << k << " I want to be nice today!" << endl;
}
แอตทริบิวต์ของอักขระ นี่คือวิธีตีความค่า "k"
Name FG BG
Black 30 40
Red 31 41
Green 32 42
Yellow 33 43
Blue 34 44
Magenta 35 45
Cyan 36 46
White 37 47
Bright Black 90 100
Bright Red 91 101
Bright Green 92 102
Bright Yellow 93 103
Bright Blue 94 104
Bright Magenta 95 105
Bright Cyan 96 106
Bright White 97 107
#include <iostream>
#include <string>
int main(int argc, char ** argv){
printf("\n");
printf("\x1B[31mTexting\033[0m\t\t");
printf("\x1B[32mTexting\033[0m\t\t");
printf("\x1B[33mTexting\033[0m\t\t");
printf("\x1B[34mTexting\033[0m\t\t");
printf("\x1B[35mTexting\033[0m\n");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[36mTexting\033[0m\t\t");
printf("\x1B[37mTexting\033[0m\t\t");
printf("\x1B[93mTexting\033[0m\n");
printf("\033[3;42;30mTexting\033[0m\t\t");
printf("\033[3;43;30mTexting\033[0m\t\t");
printf("\033[3;44;30mTexting\033[0m\t\t");
printf("\033[3;104;30mTexting\033[0m\t\t");
printf("\033[3;100;30mTexting\033[0m\n");
printf("\033[3;47;35mTexting\033[0m\t\t");
printf("\033[2;47;35mTexting\033[0m\t\t");
printf("\033[1;47;35mTexting\033[0m\t\t");
printf("\t\t");
printf("\n");
return 0;
}
g++ cpp_interactive_terminal.cpp -o cpp_interactive_terminal.cgi
chmod +x cpp_interactive_terminal.cgi
./cpp_interactive_terminal.cgi
C ++ มาตรฐานไม่มีแนวคิดเรื่อง 'สี' ดังนั้นสิ่งที่คุณถามขึ้นอยู่กับระบบปฏิบัติการ
สำหรับ Windows คุณสามารถตรวจสอบSetConsoleTextAttributeฟังก์ชัน
ใน * nix คุณต้องใช้ลำดับการหลีกเลี่ยงANSI
HANDLE hConsole;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
int col=12;
// color your text in Windows console mode
// colors are 0=black 1=blue 2=green and so on to 15=white
// colorattribute = foreground + background * 16
// to get red text on yellow use 4 + 14*16 = 228
// light red on yellow would be 12 + 14*16 = 236
FlushConsoleInputBuffer(hConsole);
SetConsoleTextAttribute(hConsole, col);
cout << "Color Text";
SetConsoleTextAttribute(hConsole, 15); //set back to black background and white text
SetConsoleTextAttribute(hConsole, 15);
ชุดสีเพื่อสีขาวสว่างไม่ขาว 7 - สีขาว และ15 - Bright White
ใน Windows 10 คุณสามารถใช้ Escape sequences ด้วยวิธีนี้:
#ifdef _WIN32
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_PROCESSING);
#endif
// print in red and restore colors default
std::cout << "\033[32m" << "Error!" << "\033[0m" << std::endl;
สมมติว่าคุณกำลังพูดถึงหน้าต่างคอนโซลของ Windows ให้ค้นหาฟังก์ชันคอนโซลในเอกสาร MSDN Library
มิฉะนั้นหรือโดยทั่วไปขึ้นอยู่กับคอนโซล ไลบรารี C ++ ไม่รองรับสี แต่ไลบรารีสำหรับการจัดการคอนโซลอาจ / จะรองรับสี เช่น Google "ncurses colors"
สำหรับเทอร์มินัลอนุกรมที่เชื่อมต่อและตัวเลียนแบบเทอร์มินัลคุณสามารถควบคุมสิ่งต่างๆได้โดยการส่งออก โดยทั่วไปสิ่งเหล่านี้เริ่มต้นด้วย ASCII 27 (อักขระหลีกใน ASCII) มีมาตรฐาน ANSI และรูปแบบที่กำหนดเองจำนวนมาก
ฉันไม่แน่ใจว่าคุณต้องการทำอะไรจริงๆ แต่ฉันเดาว่าคุณต้องการให้โปรแกรม C ++ ของคุณแสดงข้อความสีในคอนโซลใช่ไหม? ไม่รู้เกี่ยวกับ Windows แต่ใน Unices ทั้งหมด (รวมถึง Mac OS X) คุณเพียงแค่ใช้ลำดับการหลีกเลี่ยง ANSIสำหรับสิ่งนั้น
ใน Windows คุณสามารถใช้สีเขียวแดงและน้ำเงินผสมกันบนพื้นหน้า (ข้อความ) และพื้นหลังได้
/* you can use these constants
FOREGROUND_BLUE
FOREGROUND_GREEN
FOREGROUND_RED
FOREGROUND_INTENSITY
BACKGROUND_BLUE
BACKGROUND_GREEN
BACKGROUND_RED
BACKGROUND_INTENSITY
*/
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
std::cout << "I'm cyan! Who are you?" << std::endl;
วิธีที่ง่ายที่สุดที่คุณสามารถทำได้คือ:
#include <stdlib.h>
system("Color F3");
โดย "F" คือรหัสสำหรับสีพื้นหลังและ 3 คือรหัสสำหรับสีข้อความ
ยุ่งกับมันเพื่อดูการผสมสีอื่น ๆ :
system("Color 1A");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 3B");
std::cout << "Hello, what is your name?" << std::endl;
system("Color 4c");
std::cout << "Hello, what is your name?" << std::endl;
หมายเหตุ: ฉันทดสอบบน Windows เท่านั้น ผลงาน ดังที่ได้กล่าวไปแล้วนี่ไม่ใช่การข้ามแพลตฟอร์ม แต่จะไม่ทำงานบนระบบ Linux
คุณไม่จำเป็นต้องใช้ไลบรารีใด ๆ เพียงแค่เขียนระบบ ("สี 4f");
อย่าใช้ "ระบบ (" สี ... ")" หากคุณไม่ต้องการให้เต็มไปด้วยสีทั้งหน้าจอ นี่คือสคริปต์ที่จำเป็นในการสร้างข้อความสี:
#include <iostream>
#include <windows.h>
int main()
{
const WORD colors[] =
{
0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F,
0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6
};
HANDLE hstdin = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
WORD index = 0;
SetConsoleTextAttribute(hstdout, colors[index]);
std::cout << "Hello world" << std::endl;
FlushConsoleInputBuffer(hstdin);
return 0;
}
นี่คือตัวอย่าง cplusplusเป็นตัวอย่างวิธีการใช้สีในคอนโซล