Рисование в консоли Win32 на C++?
Как лучше всего рисовать вещи в окне консоли на платформе Win 32 с помощью C++?
Я знаю, что можно нарисовать простое искусство с помощью символов, но есть ли способ сделать что-то более сложное, как круги или даже растровые изображения?
6 ответов
нет, вы не можете просто сделать это, потому что консоли Win32 не поддерживает эти методы. Однако вы можете использовать GDI для рисования в окне консоли.
Это отличный пример рисования растрового изображения на консоли путем создания дочернего окна на нем: http://www.daniweb.com/code/snippet216431.html
и это говорит вам, как рисовать линии и круги:
http://www.daniweb.com/code/snippet216430.html
этот на самом деле это не рисование в консоли. Это своего рода рисунок "над" консолью, но он все еще делает трюк довольно хорошо.
#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;
}
возможно, хотя и полностью недокументировано, создать буфер экрана консоли, который использует HBITMAP
Это совместно используется между процессом окна консоли и вызывающим процессом. Это подход, который NTVDM принимает для отображения графики, как только приложение DOS переключается в графический режим.
Как отметил Ник Брукс, вы можете использовать вызовы GDI в консольных приложениях, но графика не может отображаться в том же окне, что и текстовая консоль ввода-вывода.это может не иметь значения, так как вы можете рисовать текстовые элементы в GDI.
упрощенный интерфейс для вызовов GDI в консольных приложениях предоставляется WinBGIm. Это клон DOS BGI API Borland, но с расширениями для обработки изменяемых размеров окон, ввода мыши и цветовых моделей 24bit. Поскольку он доступен в качестве исходного кода, он также служит хорошей демонстрацией использования GDI таким образом.
можно либо иметь консоль и окно GDI, либо вы можете подавить окно консоли, указав, что приложение является приложением GUI (опция-mwindows linker в GNU toolchain) - обратите внимание, что указание приложения GUI действительно только подавляет консоль, это только действительно приложение GUI, если оно имеет цикл сообщений. Наличие консоли хорошо подходит для отладки, так как именно там выводятся stdout и stderr по умолчанию.
не без usng ASCII art. Еще во времена DOS это было" довольно " легко сделать, перепроектируя растровые изображения персонажей. Это может быть возможно только в windows, создав свой собственный шрифт, но я действительно не уверен, что это возможно