繁体   English   中英

在 C++ 上的 Win32 控制台中绘图?

[英]Drawing in a Win32 Console on C++?

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

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

是的,这是可能的。

使用GetConsoleWindow获取控制台窗口的HWND ,然后在其中绘制。

#define _WIN32_WINNT 0x601
#include <windows.h>
#include <stdio.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);

    getchar();

    return 0;
}

注意: GetConsoleWindow是在 Windows 2000 中引入的。它在_WIN32_WINNT设置为 0x500 或更大时可用。

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

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

这告诉你如何画线和圆:
http://www.daniweb.com/code/snippet216430.html

但这并不是在控制台中真正绘制的。 这有点像“超过”控制台,但它仍然可以很好地完成这个技巧。

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

看看吧。

也许您在谈论 DOS 程序,使用VGA 模式 一个快速的谷歌搜索显示了一个C 教程

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM