保持Wingdi图形永久

时间:2017-11-17 14:58:09

标签: c++ winapi gdi

我正在制作一个带有许多wingdi图形的C ++控制台应用程序,主要围绕Rectangle()和FillRect(),但由于它是wingdi,因此图形不是永久性的。当我最小化控制台,放大,向下滚动时,图形会重置。我在一些帖子中看到没有预定义的解决方案,所以你必须自己制作一个。

我试过的一件事是绘制矩形一次,然后附加一个带有无限循环的线程,在每次迭代中检查矩形的第一个像素,如果它的颜色是黑色,则再次绘制整个矩形。听起来很傻,这就是我所能想到的。我知道这完全没有效率。还有其他解决办法吗?

1 个答案:

答案 0 :(得分:1)

虽然您已经能够使用GDI在应用程序的控制台窗口上绘图(可能是通过调用GetConsoleWindow然后调用GetDC),但它并不是真的为此而设计的。系统具有控制台窗口的代码,该窗口在需要更新时尝试重新绘制窗口。它不知道你的程序通过GDI做了什么,所以它没有办法保留它。

如果您只需要在控制台窗口上绘制彩色矩形,则可以使用Console API执行此类操作。您可以根据需要设置文本颜色,并绘制空格块或块字符。

如果你想做更多的通用图形,你的程序必须创建一个(非控制台)窗口,然后你可以在窗口收到WM_PAINT消息时绘制任何你想要的东西。