Цветная консоль в C++

Опубликовал – 06.12.2010

Любителям консольных приложений посвящается. Дабы как нибудь украсить свое консольное приложение, программисты прибегают к разным псевдографическим способам – выстраивают рамки из вертикальных и горизонтальных прямых увенчивая их красивыми символами и так далее. Сегодня речь пойдет еще об одном способе украшения – подкрашивание символов. Эта, казалась бы мелочь, может дать большую волю фантазии для оформления своей программы.


Я буду использовать среду разработки MVC++ 6.0, вы можете использовать любую другую. Создаем новый консольный проект. Подключаем windows.h, хедер с WinApi и пишем нечто подобно этому:

#include "stdafx.h"
#include "windows.h"

int main(int argc, char* argv[])
{
	char temp[255]; //наше сообщение
      //надо перевести строку в набор символов OEM
	CharToOem("www.znay-znay.ru was here!", temp);

      //получаем хендл нашей консоли
	void * hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD coord1, coord2;
	DWORD cWritten;
	coord1.Y = 0; coord1.X = 0;

      //выводим нашу фразу в консоль
	WriteConsoleOutputCharacter(hStdout, temp, lstrlen(temp), coord1, &cWritten);

      //теперь пройдем по каждой букве и присваиваем ей нужные атрибуты
	for (int i = 0; i < lstrlen(temp); i++) {
		  WORD wColors = 1 + i * 3;
		  coord1.X = i;
		  WriteConsoleOutputAttribute(hStdout, &wColors, 1, coord1, &cWritten);
	 }

      //далее размножим фразу хаотично на экране
	SMALL_RECT srct;
	CHAR_INFO chiBuffer[255];

      //для начала вытащим с консоли нашу фразу
	srct.Top = 0; srct.Left = 0; srct.Bottom = 1; srct.Right = 79;
	coord1.Y = 0; coord1.X = 0;
	coord2.Y = 1; coord2.X = 80;
	ReadConsoleOutput(hStdout, chiBuffer, coord2, coord1, &srct);

      //и раскидаем ее по экрану
	for (i = 0; i < 50; i++) {
		srct.Left = (SHORT)((double)(79 - lstrlen(temp)) * rand() / RAND_MAX);
		srct.Top = (SHORT)((double)25 * rand() / RAND_MAX);
		srct.Bottom = srct.Top + 1;
		WriteConsoleOutput(hStdout, chiBuffer, coord2, coord1, &srct);
	}
	Sleep(10000);

	return 0;
}

Мы рассмотрели несколько функций, которые умеют работать с консолью:

WriteConsoleOutputCharacter - выводит ряд символов в последовательные ячейки экранного буфера консоли, начинающиеся в заданном месте.
WriteConsoleOutputAttribute - выводит ряд атрибутов символа последовательных ячеек экранного буфера консоли, начинающегося в заданном месте.
ReadConsoleOutput - читает символьные данные и данные об атрибутах цвета из прямоугольного блока символьных знакомест в экранном буфере консоли, и записывает данные прямоугольного блока в заданном местоположении в буфере назначения.
WriteConsoleOutput - записывает символ и данные атрибута цвета в заданном прямоугольном блоке символьных знакомест в экранном буфере консоли. Данные, которые будут записаны, берутся из прямоугольного блока соответствующего размера в заданном месте в исходном буфере.
Более подробное описание этих интересных функций можно найти в соответствующей документации, например в MSDN. А я надеюсь статья была интересной, успехов!

Исходные коды к данной статье можно скачать тут.

Рассказать друзьям:
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • Facebook
  • Twitter
  • Яндекс.Закладки
  • В Живую Ленту Google
  • Сто закладок
Комментарии (1) - Цветная консоль в C++

Ответ

  1. Николай:

    Александр, когда ты уже перестанешь страдать ерундой и порадуешь нас очередным шедевром твоей игры?
    Что-то давненько ничего не было.

    Thumb up Thumb down 0

Ответить

Comments

Перед отправкой формы: