在C ++上使用Win32控制台绘图?

时间:2009-12-20 21:41:18

标签: c++ api winapi console

使用C ++在Win 32平台的控制台窗口中绘制内容的最佳方法是什么?

我知道您可以使用符号绘制简单的艺术作品,但有没有办法像圆圈甚至位图那样做更复杂的事情?

6 个答案:

答案 0 :(得分:12)

#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;
}

答案 1 :(得分:10)

不,你不能这样做,因为Win32控制台不支持这些方法。但是,您可以使用GDI在控制台窗口上绘图。

这是通过在控制台上创建子窗口在控制台上绘制位图的一个很好的示例: http://www.daniweb.com/code/snippet216431.html

这告诉你如何绘制线条和圆圈:
http://www.daniweb.com/code/snippet216430.html

虽然这并不是真的在控制台中绘图。这有点像“在控制台上”,但它仍然可以很好地完成。

答案 2 :(得分:4)

虽然完全没有记录,但可以创建一个控制台屏幕缓冲区,该缓冲区使用在控制台窗口进程和调用进程之间共享的HBITMAP。这是NTVDM在DOS应用程序切换到图形模式后显示图形的方法。

See it.

答案 3 :(得分:2)

也许你在谈论DOS程序,使用VGA mode。快速谷歌搜索会显示C tutorial

答案 4 :(得分:2)

正如Nick Brooks指出的那样,您可以在控制台应用程序中使用GDI调用,但图形不能出现在与文本控制台I / O相同的窗口中。这可能无关紧要,因为您可以在GDI中绘制文本元素。

WinBGIm提供了控制台应用程序中GDI调用的简化界面。它是Borland的DOS BGI API的克隆,但有扩展来处理可调整大小的窗口,鼠标输入和24位颜色模型。由于它可以作为源代码使用,因此它也很好地证明了以这种方式使用GDI。

可以同时拥有控制台和GDI窗口,也可以通过指定应用程序是GUI应用程序(GNU工具链中的-mwindows链接器选项)来禁止控制台窗口 - 请注意指定GUI应用程序真的只是抑制控制台,如果它有一个消息循环,它只是一个真正的GUI应用程序。控制台很适合调试,因为它是默认输出stdout和stderr的地方。

答案 5 :(得分:0)

不是没有使用ASCII艺术。回到DOS的时代,通过重新设计角色位图“相当”容易。它可能只能在Windows中创建自己的字体,但我真的不确定是否可能