2013-06-27 99 views
1

我想將控制檯的文本顏色設置爲RGB顏色。 我創建了一個函數來獲取控制檯的ColorTable並更改其中的顏色,但它不起作用。我不知道如何將文本顏色設置爲顏色表中的值,所以我只是更改整個顏色表,但它什麼都不做。C++將控制檯文本顏色設置爲RGB值

void setColor(int r, int g, int b) 
{ 
    COLORREF cr; 
    cr = RGB(r, g, b); 
    PCONSOLE_SCREEN_BUFFER_INFOEX ci; 
    CONSOLE_SCREEN_BUFFER_INFOEX cir; 
    ci = ○ 
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 
    GetConsoleScreenBufferInfoEx(hConsole , ci); 
    cout <<hex<< ci->ColorTable[2]; 
    for(int i=0;i<16;i++){ 
      ci->ColorTable[i] = cr; 
    } 
    SetConsoleScreenBufferInfoEx(hConsole, ci); 

    GetConsoleScreenBufferInfoEx(hConsole , ci); 

    cout <<endl << ci->ColorTable[2]; 
} 

main()我調用該函數多次,但輸出是一樣的每一個電話和顏色沒有變化。 SetConsoleScreenBufferInfoEx()GetConsoleScreenBufferInfoEx()似乎沒有任何作用,ci在被調用時保持不變。

我該怎麼做?

此外,如果它工作,我認爲背景顏色也會因爲我改變整個調色盤而發生變化,所以如何將顏色表中的文本顏色設置爲特定值,例如,我把ci->ColorTable[2] = cr;放在changeColor()函數中而不是for循環中,我怎樣才能將文本顏色設置爲現在存儲在ColorTable[2]中的顏色?

+0

我不知道這是否是有用的,但你可以看看相關的問題http://stackoverflow.com/questions/8285825/how-to-change -text-or-background-color-in-a-windows-console-application和http://stackoverflow.com/questions/4053837/c-colors-in-console-different-colors-in-different-text。 –

回答

3

您需要使用SetConsoleTextAttribute來設置當前的文字顏色和背景顏色,詳見http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047(v=vs.85).aspx

+0

謝謝,但有了這個功能,我沒有RGB顏色。我剛剛發現這個問題http://stackoverflow.com/questions/9509278/rgb-specific-console-text-color-c,接受的答案告訴修改顏色表就像我試圖做的,然後選擇顏色從顏色表通過'SetConsoleTextAttribue'(如果我理解正確)。但是我沒有修改顏色表。 – user1950929

+0

你檢查過'SetConsoleScreenBufferInfoEx'的返回值嗎?看看它是否成功?如果失敗了,就調用GetLastError? – Mgetz

+0

剛剛測試,'getlastError()'返回'0x57',對於'SetConsoleScreenBufferInfoEx'和'GetConsoleScreenBufferInfoEx'都是'ERROR_INVALID_PARAMETER'。任何想法爲什麼參數可能無效?也許我在使用錯誤的句柄? – user1950929

2

Windows控制檯顏色表看起來是這樣的:

Color   Background Foreground 
--------------------------------------------- 
Black   0   0 
Blue    1   1 
Green   2   2 
Cyan    3   3 
Red     4   4 
Magenta   5   5 
Brown   6   6 
White   7   7 
Gray    -   8 
Intense Blue  -   9 
Intense Green -   10 
Intense Cyan  -   11 
Intense Red   -   12 
Intense Magenta -   13 
Yellow   -   14 
Intense White -    15 

要設置背景顏色,你必須前景色代碼 背景顏色的代碼使用這個公式結合:

finalcolor = (16*backgroundcolor) + foregroundcolor 

如果你想設置一個文本顏色,它有一個藍色背景和白色文本 你只需在表格中查找顏色代碼。藍色是1,白色是15;

因此int backgroundcolor=1;int foregroundcolor=15;

#include <windows.h> 
#include <iostream> 
using namespace std; 

void setcolor(int color) 
{ 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color); 
    return; 
} 

int main() 
{ 

    int foregroundcolor=15; 
    int backgroundcolor=1; 
    int finalcolor; 

    finalcolor=(16*backgroundcolor)+foregroundcolor; 

    setcolor(finalcolor); 
    cout<<"finalcolor=(16*backgroundcolor)+foregroundcolor\n"; 
    setcolor(7); 

    return 0; 
}