2013-06-15 31 views
10

Tôi biết một chút về cách thực hiện các màu trong giao diện điều khiển Win32 C++. Nhưng nó không thực sự hiệu quả. Ví dụ:Bàn điều khiển C++ Win32 Màu

SYSTEM("color 01") 

Làm chậm quá trình xử lý của bạn. Ngoài ra:

HANDLE h = GetStdHandle (STD_OUTPUT_HANDLE); 
WORD wOldColorAttrs; 
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; 

/* 
    * First save the current color information 
    */ 

GetConsoleScreenBufferInfo(h, &csbiInfo); 
wOldColorAttrs = csbiInfo.wAttributes; 

/* 
    * Set the new color information 
    */ 

SetConsoleTextAttribute (h, FOREGROUND_RED); 

Hoạt động tốt, nhưng không có nhiều màu. Ngoài ra, FOREGROUND_RED có màu đỏ đậm.

Vì vậy, những gì tôi muốn hỏi, không có cách nào như thuộc tính CLR Console::ForegroundColor thiết lập, vì vậy bạn có thể sử dụng bất kỳ màu nào từ bảng điều khiển ConsoleColor?

+2

Các bạn đã cố gắng thiết lập Cờ 'FOREGROUND_INTENSITY' để làm cho màu đỏ sáng? Ví dụ: 'SetConsoleTextAttribute (h, FOREGROUND_RED | FOREGROUND_INTENSITY)' –

+0

Điều đó làm việc, nhưng tôi vẫn tự hỏi liệu có cách nào để có được nhiều màu hơn, có thể với bảng màu? –

+0

Bàn điều khiển chỉ hỗ trợ 16 màu, được tạo bằng cách kết hợp FOREGROUND_RED, FOREGROUND_BLUE, FOREGROUND_GREEN và FOREGROUND_INTENSITY. – riv

Trả lời

20

Giao diện điều khiển chỉ hỗ trợ 16 màu sắc, mà được tạo ra bằng cách kết hợp bốn giá trị như sau (tôi có thể đã có các màu xám/darkgray bối rối, nhưng bạn sẽ có được ý tưởng):

namespace ConsoleForeground 
{ 
    enum { 
    BLACK    = 0, 
    DARKBLUE   = FOREGROUND_BLUE, 
    DARKGREEN   = FOREGROUND_GREEN, 
    DARKCYAN   = FOREGROUND_GREEN | FOREGROUND_BLUE, 
    DARKRED   = FOREGROUND_RED, 
    DARKMAGENTA  = FOREGROUND_RED | FOREGROUND_BLUE, 
    DARKYELLOW  = FOREGROUND_RED | FOREGROUND_GREEN, 
    DARKGRAY   = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, 
    GRAY    = FOREGROUND_INTENSITY, 
    BLUE    = FOREGROUND_INTENSITY | FOREGROUND_BLUE, 
    GREEN    = FOREGROUND_INTENSITY | FOREGROUND_GREEN, 
    CYAN    = FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE, 
    RED    = FOREGROUND_INTENSITY | FOREGROUND_RED, 
    MAGENTA   = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE, 
    YELLOW   = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN, 
    WHITE    = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, 
    }; 
} 
+0

Cảm ơn, điều đó rất hữu ích, cảm ơn tất cả các câu trả lời. –

+0

Bạn chỉ có thể xóa tất cả các bài tập và nó sẽ vẫn hoạt động vì các mã màu theo thứ tự tăng dần. – fereh

2

Bàn điều khiển chỉ có một bộ màu giới hạn. Việc triển khai .NET sử dụng ConsoleColor để đặt màu chỉ là một đếm 16 màu.

Bàn điều khiển Win32 cơ bản có 8 màu cơ bản được tăng gấp đôi thông qua việc sử dụng cờ cường độ (như đã đề cập trong bình luận của Shaktal theo câu hỏi của bạn).