在C++;? < C++ > 在Win 32平台上控制台窗口中绘制东西的最佳方式是什么?

在C++;? < C++ > 在Win 32平台上控制台窗口中绘制东西的最佳方式是什么?,c++,api,winapi,console,C++,Api,Winapi,Console,我知道你可以用符号画简单的艺术作品,但是有没有一种方法可以画更复杂的东西,比如圆,甚至位图?没有ASCII艺术就不行。在DOS时代,通过重新设计字符位图“相当”容易做到。可能只有在windows中创建自己的字体才有可能,但我真的不确定这是否可能不,你不能这么做,因为Win32 console不支持这些方法。但是,您可以使用GDI在控制台窗口上绘图。 这是通过在控制台上创建子窗口在控制台上绘制位图的一个很好的示例: 这告诉你如何画线和圆: 不过,这并不是在控制台中真正起作用。这有点像是在“覆盖

我知道你可以用符号画简单的艺术作品,但是有没有一种方法可以画更复杂的东西,比如圆,甚至位图?

没有ASCII艺术就不行。在DOS时代,通过重新设计字符位图“相当”容易做到。可能只有在windows中创建自己的字体才有可能,但我真的不确定这是否可能

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

这是通过在控制台上创建子窗口在控制台上绘制位图的一个很好的示例:

这告诉你如何画线和圆:


不过,这并不是在控制台中真正起作用。这有点像是在“覆盖”控制台,但它仍然能很好地发挥作用。

也许你在谈论DOS程序,使用的是。快速谷歌搜索会显示一个。

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

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


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

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

是的,这是可能的

使用获取控制台窗口的
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;
}
#定义_WIN32_WINNT 0x601
#包括
#包括
int main(){
//获取控制台的窗口句柄和设备上下文
HWND console_handle=GetConsoleWindow();
HDC设备上下文=GetDC(控制台句柄);
//这是一条5像素宽的红线[从初始值0,0]到300300
HPEN-pen=CreatePen(PS_-SOLID,5,RGB(255,0,0));
选择对象(设备上下文、笔);
LineTo(设备上下文,300300);
ReleaseDC(控制台句柄、设备上下文);
getchar();
返回0;
}

注意:
GetConsoleWindow
是在Windows 2000中引入的。当
\u WIN32\u WINNT
设置为0x500或更大时,该功能可用。

那么他们是如何在控制台中制作那些旧的DOS游戏的?当时的控制台与现在的控制台不同。DOS游戏没有使用WIN32控制台,而是直接将图形写入视频内存。PS:阅读有关模式13h的内容。。。你可能会找到这方面的大部分信息:)你被GDI困住了:)这在VC++中可能吗?我不想习惯一个新的IDE。