控制台窗口调用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
相关产品推荐
相关产品推荐

