2011-12-20 51 views
6

Tôi biết cách đặt chúng (SetConsoleTextAttribute) nhưng không có một GetConsoleTextAttribute để lấy thông tin này. Trên bảng điều khiển không bị ảnh hưởng, nó phải là int 7.cách nhận màu nền và màu văn bản hiện tại?

Vấn đề là khi thoát khỏi một chương trình đặt màu văn bản nó vẫn giữ nguyên cho thời gian đã cho, và tôi không thể giả định rằng người dùng chưa đặt màu sắc theo ý thích tùy chỉnh của mình.

Trả lời

4

Một grep nhanh wincon.h cho thấy CONSOLE_SCREEN_BUFFER_INFO có thành viên wAttributes đó là documented as "Các thuộc tính của các nhân vật bằng văn bản cho một bộ đệm màn hình bằng chức năng WriteFile và WriteConsole, hoặc lặp lại để một bộ đệm màn hình bằng chức năng ReadFile và ReadConsole. " Điều này phù hợp với the description of SetConsoleTextAttribute: "Đặt thuộc tính của các ký tự được ghi vào bộ đệm màn hình bảng điều khiển bằng hàm WriteFile hoặc WriteConsole hoặc được lặp lại bởi hàm ReadFile hoặc ReadConsole." Cấu trúc được trả về bởi GetConsoleScreenBufferInfo.

2

Đây là đoạn mã.

HANDLE      m_hConsole; 
WORD      m_currentConsoleAttr; 
CONSOLE_SCREEN_BUFFER_INFO csbi; 

//retrieve and save the current attributes 
m_hConsole=GetStdHandle(STD_OUTPUT_HANDLE); 
if(GetConsoleScreenBufferInfo(m_hConsole, &csbi)) 
    m_currentConsoleAttr = csbi.wAttributes; 

//change the attribute to what you like 
SetConsoleTextAttribute (
      m_hConsole, 
      FOREGROUND_RED | 
      FOREGROUND_GREEN); 

//set the ttribute to the original one 
SetConsoleTextAttribute (
      m_hConsole, 
      m_currentConsoleAttr); 

hy vọng đây là trợ giúp.

6

Nhờ Talent25 tôi đã thực hiện chức năng này:

#include <Windows.h>  
bool GetColor(short &ret){ 
     CONSOLE_SCREEN_BUFFER_INFO info; 
     if (!GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info)) 
      return false; 
     ret = info.wAttributes; 
     return true; 
} 

sử dụng nó:

GetColor(CurrentColor); 

CurrentColor - biến cho số lượng của màu sắc (nền * 16 + màu chính). Giá trị trả lại thông báo nếu hành động thành công.

Các vấn đề liên quan