2012-02-08 2 views
12

Я знаю «textcolor();» для C++ и я видел методы для unix ... , но есть ли способ для окон?C цветной текст в терминальных приложениях в окнах

#include <stdio.h> 
int main() 
{ 
    printf("\ntest - C programming text color!"); 
    printf("\n--------------------------------"); 
    printf("\n\n\t\t-BREAK-\n\n"); 
    textcolor(15); 
    printf("WHITE\n"); 
    textcolor(0); 
    printf("BLACK\n"); 
    textcolor(4); 
    printf("RED\n"); 
    textcolor(1); 
    printf("BLUE\n"); 
    textcolor(2); 
    printf("GREEN\n"); 
    textcolor(5); 
    printf("MAGENTA\n"); 
    textcolor(14); 
    printf("YELLOW\n"); 
    textcolor(3); 
    printf("CYAN\n"); 
    textcolor(7); 
    printf("LIGHT GRAY\n"); 
} 

Я не могу найти что-нибудь в сети ... давайте надеяться, что хорошие люди от переполнения стека может помочь: D

C пожалуйста, не C++

ответ

28

Поскольку вы хотите C и Windows, специфические так Я рекомендую использовать функцию SetConsoleTextAttribute() в Win32 API. Вам нужно будет захватить дескриптор консоли, а затем передать его с соответствующими атрибутами.

В качестве простого примера:

/* Change console text color, then restore it back to normal. */ 
#include <stdio.h> 
#include <windows.h> 

int main() { 
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 
    CONSOLE_SCREEN_BUFFER_INFO consoleInfo; 
    WORD saved_attributes; 

    /* Save current attributes */ 
    GetConsoleScreenBufferInfo(hConsole, &consoleInfo); 
    saved_attributes = consoleInfo.wAttributes; 

    SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE); 
    printf("This is some nice COLORFUL text, isn't it?"); 

    /* Restore original attributes */ 
    SetConsoleTextAttribute(hConsole, saved_attributes); 
    printf("Back to normal"); 

    return 0; 
} 

Для получения дополнительной информации о доступных атрибутах, смотрите here.

Надеюсь, это поможет! :)

+0

Большое спасибо, он отлично работает, просто интересно, как вернуть его к светло-серого по умолчанию? Большое спасибо! –

+0

@JoeDF Для этого вам нужно будет прочитать исходные атрибуты с помощью 'GetConsoleScreenBufferInfo()', сохранить их в переменной и затем восстановить их по завершении. Я обновил ответ, чтобы показать, как это сделать. :) – Miguel

+0

СПАСИБО МНОГО! : D –

-3

Работает вторая с «include windows.h». Другой, вероятно, является началом

+0

Я думаю, что это ответ на ответ Мигеля? Вы должны использовать для этого комментарии. Вместо этого вы добавили новый ответ. –