You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

控制台窗口调用WinAPI绘图无输出,如何解决?

控制台窗口绘制图形无显示的问题修复

问题分析

  • 矩形绘制参数无效:你调用Rectangle(hDC, 500, 500, 500, 500)时,左上角与右下角坐标完全重合,绘制的矩形宽高为0,无法显示。
  • 画笔未正确绑定到设备上下文:第二次创建白色画笔后,没有通过SelectObject将其选入DC,导致画线操作仍使用之前的红色画笔,若控制台背景颜色与红色接近,也会难以分辨。
  • GDI资源未正确释放:创建的画笔未销毁,也未恢复DC原来的画笔,存在资源泄漏风险。

修改后的代码

#include <iostream>
#include <conio.h>
#include <windows.h>

int main()
{
    HDC hDC;
    HWND hWnd;
    HPEN hPen, hOldPen; // 保存原画笔

    hWnd = GetConsoleWindow();
    hDC = GetDC(hWnd);

    // 创建红色画笔并选入DC,保存原画笔
    hPen = CreatePen(PS_SOLID, 5, RGB(255, 0, 0));
    hOldPen = (HPEN)SelectObject(hDC, hPen);
    // 修改矩形坐标,确保宽高大于0
    Rectangle(hDC, 100, 100, 300, 300);
    // 销毁红色画笔
    DeleteObject(hPen);

    // 创建白色画笔并选入DC
    hPen = CreatePen(PS_SOLID, 5, RGB(255, 255, 255));
    SelectObject(hDC, hPen);
    MoveToEx(hDC, 10, 10, NULL);
    LineTo(hDC, 100, 100);
    // 销毁白色画笔
    DeleteObject(hPen);

    // 恢复DC原来的画笔
    SelectObject(hDC, hOldPen);
    ReleaseDC(hWnd, hDC);
    _getch();

    return 0;
}

额外说明

如果运行后图形仍被控制台刷新覆盖,可以尝试在绘制前禁用控制台窗口的自动刷新,或者在_getch()前添加InvalidateRect(hWnd, NULL, FALSE);强制窗口重绘,但上述修改已经解决了核心的不显示问题。

内容的提问来源于stack exchange,提问作者Ivanov Vladislav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:57:25