Рисование в консоли Win32 на C ++? - PullRequest
6 голосов
/ 21 декабря 2009

Как лучше всего рисовать вещи в окне консоли на платформе Win 32 с использованием C ++?

Я знаю, что вы можете рисовать простые рисунки, используя символы, но есть ли способ сделать что-то более сложное, например, круги или даже растровые изображения?

Ответы [ 6 ]

12 голосов
/ 04 ноября 2012
#include <windows.h>
#include <iostream.h>


int main()
{
    // Get window handle to console, and device context
    HWND console_handle = GetConsoleWindow();
    HDC device_context = GetDC(console_handle);

    //Here's a 5 pixels wide RED line [from initial 0,0] to 300,300
     HPEN pen =CreatePen(PS_SOLID,5,RGB(255,0,0));
    SelectObject(device_context,pen);
    LineTo(device_context,300, 300);


    ReleaseDC(console_handle, device_context);
    cin.ignore();
    return 0;
}
10 голосов
/ 21 декабря 2009

Нет, вы не можете просто сделать это, потому что консоль Win32 не поддерживает эти методы. Однако вы можете использовать GDI для рисования в окне консоли.

Это отличный пример рисования растрового изображения на консоли путем создания на нем дочернего окна: http://www.daniweb.com/code/snippet216431.html

И это говорит вам, как рисовать линии и круги:
http://www.daniweb.com/code/snippet216430.html

Это не совсем рисунок в консоли, хотя. Это своего рода рисование «над» консолью, но оно все еще хорошо справляется с задачей.

4 голосов
/ 13 января 2010

Можно, хотя и полностью без документов, создать экранный буфер консоли, который использует HBITMAP, который используется совместно для процесса окна консоли и вызывающего процесса. Это подход, который NTVDM использует для отображения графики, когда приложение DOS переключается в графический режим.

Смотри.

2 голосов
/ 21 декабря 2009

Как отметил Ник Брукс, вы можете использовать вызовы GDI в консольных приложениях, но графика не может отображаться в том же окне, что и ввод / вывод текстовой консоли. Это может не иметь значения, поскольку вы можете рисовать текстовые элементы в GDI.

Упрощенный интерфейс для вызовов GDI в консольных приложениях предоставляется WinBGIm . Это клон DOS BGI API Borland, но с расширениями для обработки изменяемых размеров окон, ввода с помощью мыши и 24-битных цветовых моделей. Поскольку он доступен в виде исходного кода, он также служит хорошей демонстрацией использования GDI таким образом.

Можно иметь как консоль, так и окно GDI, или вы можете отключить окно консоли, указав, что приложение является приложением с графическим интерфейсом (опция -mwindows linker в цепочке инструментов GNU) - обратите внимание, что указывается приложение с графическим интерфейсом на самом деле только подавляет консоль, это действительно приложение с графическим интерфейсом, только если оно имеет цикл сообщений. Наличие консоли хорошо для отладки, поскольку именно там по умолчанию выводятся stdout и stderr.

2 голосов
/ 21 декабря 2009

Возможно, вы говорите о программах DOS, использующих VGA mode . Быстрый поиск в Google показывает учебник C .

0 голосов
/ 21 декабря 2009

Не без использования ASCII art. Еще во времена DOS это было «довольно» легко сделать, переработав растровые изображения персонажей. Это возможно только в Windows, создав собственный шрифт, но я действительно не уверен, что это возможно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...