Иногда хочется или даже полезно немного раскрасить вывод консольной программы :-)
Подробно про API для работы с консолью (достаточно обширный) можно прочитать в MSDN в разделе «WIn32 and COM Development\System Services\SDK-Documentation\DLLs, Processes and Threads\Character-Mode Applications».
Для установки свойств выводимого текста сущетсвует функция SetConsoleTextAttribute. Вот ее прототип: BOOL WINAPI SetConsoleTextAttribute(HANDLE hConsole, WORD wAttributes). Нас будет интересовать слово wAttributes, а точнее константы:
FOREGROUND_RED
FOREGROUND_GREEN
FOREGROUND_BLUE
FOREGROUND_INTENSITY
и
BACKGROUND_RED
BACKGROUND_GREEN
BACKGROUND_BLUE
BACKGROUND_INTENSITY
Комбинируя эти константы при помощи побитового или можно получать цвета, отличные от красного, зеленого и синего. То есть, слово wAttributes аналогично параметру, принимаемому командой COLOR в cmd.exe.
Ну вот собственно и пример:
/*
* DrSmith 2009
* Эта программка демонстрирует возможность
* цветного вывода в консоли Windows :-)
*/
#include <windows.h>
#include <tchar.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HANDLE hStdIn, hStdOut;
TCHAR *lpszString1 = TEXT(«первая строчка»);
TCHAR *lpszString2 = TEXT(«вторая строчка»);
DWORD dummy;
/* требуем консоль нашему процессу */
if(!AllocConsole()) {
MessageBox(NULL, TEXT(«AllocConsole error.»), TEXT(«Error»), MB_OK MB_ICONERROR);
return 1;
}
/* получаем хэндлы стандартного ввода и вывода */
hStdIn = GetStdHandle(STD_INPUT_HANDLE);
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(hStdIn == INVALID_HANDLE_VALUE
hStdOut == INVALID_HANDLE_VALUE) {
MessageBox(NULL, TEXT(«GetStdHandle error.»), TEXT(«Error»), MB_OK MB_ICONERROR);
return 2;
}
/* устанавливаем сочный зеленый цвет текста */
SetConsoleTextAttribute(hStdOut, FOREGROUND_GREEN FOREGROUND_INTENSITY);
/* Выводим первую тестовую строчку */
WriteConsole(hStdOut, lpszString1, _tcslen(lpszString1), &dummy, NULL);
/* устанавливаем красный цвет текста на белом фоне */
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED
BACKGROUND_RED BACKGROUND_GREEN BACKGROUND_BLUE BACKGROUND_INTENSITY);
/* Выводим вторую тестовую строчку */
WriteConsole(hStdOut, lpszString2, _tcslen(lpszString2), &dummy, NULL);
Sleep(5000);
return 0;
}
Подробно про API для работы с консолью (достаточно обширный) можно прочитать в MSDN в разделе «WIn32 and COM Development\System Services\SDK-Documentation\DLLs, Processes and Threads\Character-Mode Applications».
Для установки свойств выводимого текста сущетсвует функция SetConsoleTextAttribute. Вот ее прототип: BOOL WINAPI SetConsoleTextAttribute(HANDLE hConsole, WORD wAttributes). Нас будет интересовать слово wAttributes, а точнее константы:
FOREGROUND_RED
FOREGROUND_GREEN
FOREGROUND_BLUE
FOREGROUND_INTENSITY
и
BACKGROUND_RED
BACKGROUND_GREEN
BACKGROUND_BLUE
BACKGROUND_INTENSITY
Комбинируя эти константы при помощи побитового или можно получать цвета, отличные от красного, зеленого и синего. То есть, слово wAttributes аналогично параметру, принимаемому командой COLOR в cmd.exe.
Ну вот собственно и пример:
/*
* DrSmith 2009
* Эта программка демонстрирует возможность
* цветного вывода в консоли Windows :-)
*/
#include <windows.h>
#include <tchar.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HANDLE hStdIn, hStdOut;
TCHAR *lpszString1 = TEXT(«первая строчка»);
TCHAR *lpszString2 = TEXT(«вторая строчка»);
DWORD dummy;
/* требуем консоль нашему процессу */
if(!AllocConsole()) {
MessageBox(NULL, TEXT(«AllocConsole error.»), TEXT(«Error»), MB_OK MB_ICONERROR);
return 1;
}
/* получаем хэндлы стандартного ввода и вывода */
hStdIn = GetStdHandle(STD_INPUT_HANDLE);
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(hStdIn == INVALID_HANDLE_VALUE
hStdOut == INVALID_HANDLE_VALUE) {
MessageBox(NULL, TEXT(«GetStdHandle error.»), TEXT(«Error»), MB_OK MB_ICONERROR);
return 2;
}
/* устанавливаем сочный зеленый цвет текста */
SetConsoleTextAttribute(hStdOut, FOREGROUND_GREEN FOREGROUND_INTENSITY);
/* Выводим первую тестовую строчку */
WriteConsole(hStdOut, lpszString1, _tcslen(lpszString1), &dummy, NULL);
/* устанавливаем красный цвет текста на белом фоне */
SetConsoleTextAttribute(hStdOut, FOREGROUND_RED
BACKGROUND_RED BACKGROUND_GREEN BACKGROUND_BLUE BACKGROUND_INTENSITY);
/* Выводим вторую тестовую строчку */
WriteConsole(hStdOut, lpszString2, _tcslen(lpszString2), &dummy, NULL);
Sleep(5000);
return 0;
}