Оказывается, в консоли можно сотворить даже что-то типа графического редактора paint. Ниже показан код, как это делается. И добавлены некоторые комментариями.
using namespace std;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE),
hIn = GetStdHandle(STD_INPUT_HANDLE);
void main()
{
CONSOLE_CURSOR_INFO cinfo = {100, false};
SetConsoleCursorInfo(hOut, &cinfo);//скрыли курсор
COORD c = { 0, 0 };
DWORD d;
CONSOLE_SCREEN_BUFFER_INFO csbi;
INPUT_RECORD ir;
// устанавливаем режим консоли
SetConsoleMode(hIn, ENABLE_MOUSE_INPUT | ENABLE_INSERT_MODE);
while (1) // бесконечный цикл
{
while (ReadConsoleInput(hIn, &ir, 1, &d)) // считываем инфу из входного потока
{
if (ir.EventType == MOUSE_EVENT) // если произошло некое событие с мышью
{
if (ir.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) // если нажата левая кнопка мыши
{
// курсор ставится в позицию, где кликнула мышь
SetConsoleCursorPosition(hOut, ir.Event.MouseEvent.dwMousePosition);
cout << '*'; // при каждом клике левой кнопкой рисуется символ "звездочка"
}
// при нажатии правой кнопки мыши всё перекрашиваем в черный цвет (стираем)
else if (ir.Event.MouseEvent.dwButtonState==RIGHTMOST_BUTTON_PRESSED)
{
GetConsoleScreenBufferInfo(hOut, &csbi);
FillConsoleOutputAttribute(hOut, 0, csbi.dwSize.X*csbi.dwSize.Y, c, &d);
}
}
}
}
}
Рисование окон в консоли
using namespace std;
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE),
hIn = GetStdHandle(STD_INPUT_HANDLE);
void main()
{
CONSOLE_CURSOR_INFO cinfo = {100, false};
SetConsoleCursorInfo(hOut, &cinfo);//скрыли курсор
COORD c = { 0, 0 };
DWORD d;
CONSOLE_SCREEN_BUFFER_INFO csbi;
INPUT_RECORD ir;
// устанавливаем режим консоли
SetConsoleMode(hIn, ENABLE_MOUSE_INPUT | ENABLE_INSERT_MODE);
while (1) // бесконечный цикл
{
while (ReadConsoleInput(hIn, &ir, 1, &d)) // считываем инфу из входного потока
{
if (ir.EventType == MOUSE_EVENT) // если произошло некое событие с мышью
{
if (ir.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) // если нажата левая кнопка мыши
{
// курсор ставится в позицию, где кликнула мышь
SetConsoleCursorPosition(hOut, ir.Event.MouseEvent.dwMousePosition);
cout << '*'; // при каждом клике левой кнопкой рисуется символ "звездочка"
}
// при нажатии правой кнопки мыши всё перекрашиваем в черный цвет (стираем)
else if (ir.Event.MouseEvent.dwButtonState==RIGHTMOST_BUTTON_PRESSED)
{
GetConsoleScreenBufferInfo(hOut, &csbi);
FillConsoleOutputAttribute(hOut, 0, csbi.dwSize.X*csbi.dwSize.Y, c, &d);
}
}
}
}
}
Рисование окон в консоли
Комментариев нет:
Отправить комментарий