LIBS += C:\Qt\Tools\mingw810_64\x86_64-w64-mingw32\lib\libgdi32.a
Нарисуем минималистичный рисунок в консоли, пусть это будет белая линия от начала координат (0, 0) в точку (300, 300). По умолчанию, перо которым рисуется в консоли - черного цвета и на черном цвете консоли трудно различимо, поэтому у нас добавляется несколько строчек по созданию белого пера и привязки его к консольному окну. Также возникла ситуация что рисунок появлялся в консоли не при каждом запуске программы, было сделано предположение что рисует быстрее чем заканчиваются вывод консоли на экран и перерисовки консоли стирают рисунок. Предположение подтвердилось путем введения задержки после запуска функцией Sleep(100) и получением стабильной отрисовки.
#include <windows.h> // GetConsoleWindow(), GetDC()...
int main(){
Sleep(100); // Задержка 100 мс, без этого, иногда, перерисовка окна затирает рисунок
HWND hwnd = GetConsoleWindow(); // Находим дескриптор (handle) консольного окна
HDC hdc = GetDC(hwnd); // Находим контекст устройства DC - device context
HPEN hPen = CreatePen(PS_SOLID, 5, RGB(255, 255, 255)); // Создаем (сплошное перо, толщиной 5 пикселов, белого цвета)
SelectObject(hdc, hPen);// Привязываем перо к экрану
LineTo(hdc, 300, 300); // Рисуем линию от текущих координат (0, 0) к (300, 300)
}
Результат работы программы.
Усложним задачу и нарисуем толстыми, цветными, градиентными линиями синус.
#include <windows.h> // GetConsoleWindow(), GetDC()...
#include <iostream> // std::cout
#include <cmath> // sin()
#include <cstdlib> // system()
int main(){
system("chcp 65001"); // Active code page: 65001 (Устанавливает UTF-8)
system("cls"); // Очищает окно от предыдущего вывода
HWND hwnd = GetConsoleWindow(); // Находим дескриптор (handle) консольного окна
HDC hdc = GetDC(hwnd); // Находим контекст устройства DC - device context
int x = 0; // Координата x
for (float i = 0; i < 3.14 * 30; i += 0.05){ // Итерации рисования
int R = fabs(sin(i * 1.3 - 0.3)) * 255; // Циклически меняем значение цвета
int G = fabs(sin(i * 1.1 - 0.5)) * 255; // Циклически меняем значение цвета
int B = fabs(sin(i * 1.7 - 0.7)) * 255; // Циклически меняем значение цвета
COLORREF color = RGB(R, G, B); // Цвет (R, G, B) 0...255 Меняем цвет в процессе
HPEN hPen = CreatePen(PS_SOLID, 5, color); // Создаем перо
SelectObject(hdc, hPen); // Привязываем перо к экрану
int y = 350 - 340 * sin(i); // Координата y
LineTo(hdc, x, y); // Рисуем линию
x += 1; // Увеличиваем x для рисования следующей точки
DeleteObject(hPen); // Освобождаем ресурсы
}
ReleaseDC(hwnd, hdc); // Освобождаем ресурсы
std::cout << "Рисуем в консоли"; // Выводим текст
return 0;
}
Результат работы программы.