рекламная строчка Nolix

пятница, 1 января 2016 г.

Рисование окон в консоли на с++

Пытаясь разобраться с вопросом рисования окон в консоли на с++, я столкнулся с тем, что в Интернете об этом вовсе не много информации. А в примерах кода не хватает комментариев, чтобы быстро понять код.
Ниже приведен код программы на с++ с некоторыми комментариями, которая рисует два окна друг над другом.

//получить дескриптор окна консоли
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);

// функция рисования окна, заглавие которого определяется параметром title
// верхний левый угол этого окна будет находиться по координатам x и y
// ширина окна - width, высота - height

void DrawWindow(char * title, int x, int y, int width, int height)
{
COORD c = { x, y };
DWORD d;
SetConsoleCursorPosition(hOut, c); //переставить курсор в координаты x, y
SetConsoleTextAttribute(hOut, FOREGROUND_BLUE | BACKGROUND_RED); // устанавливаем цвет - синий на красном фоне

// рисуем прямоугольник заданного выше цвета
for (int i = 0; i<= width; ++i)
{
if (i == width)
cout << 'X';
else if (i < strlen(title))
cout << title[i];
else
cout << ' ';
}
SetConsoleTextAttribute(hOut, 0);
for (int i = 1; i <= height; ++i)
{
c.X = x;
c.Y = y + i;
//заполнение цветом
FillConsoleOutputAttribute(hOut, 0xff, width + 1, c, &d);
//заполнение символом "пробел"
FillConsoleOutputCharacter(hOut, ' ', width + 1, c, &d);
c.X = x + width + 1;
SetConsoleCursorPosition(hOut, c);
cout << ' ';
}
c.X = x + 1;
c.Y = y + height + 1;
FillConsoleOutputAttribute(hOut, 0, width + 1, c, &d);
//заполняет символом
FillConsoleOutputCharacter(hOut, ' ', width + 1, c, &d);

}

void main()
{
COORD c = { 0, 0 };
DWORD d;
// Информация о курсоре
CONSOLE_CURSOR_INFO ci = { 100, false };
SetConsoleCursorInfo(hOut, &ci);
//Информация об окне консоли будет храниться в структуре csbi
CONSOLE_SCREEN_BUFFER_INFO csbi;
//получаем информацию об заданном экранном буфере консоли
GetConsoleScreenBufferInfo(hOut, &csbi);
//заполняет цветом
// цвет определяется шестнадцатиричным числом - в данном случае 00 означает черный цвет
FillConsoleOutputAttribute(hOut, 0x00, csbi.dwSize.X*csbi.dwSize.Y, c, &d);
// заполняет символом "пробел"
FillConsoleOutputCharacter(hOut, ' ', csbi.dwSize.X*csbi.dwSize.Y, c, &d);
// рисуем окно с координатами левого верхнего угла 3, 3
DrawWindow("MyWindow", 4, 4, 20, 5);
// рисуем окно с координатами левого верхнего угла 6, 6
DrawWindow("MyWindow", 7, 7, 20, 5);
_getch();
}

Рисование мышкой в консоли с++

Комментариев нет:

Отправить комментарий