保持 Wingdi 图形永久
Keep Wingdi graphics permanent
我正在制作一个 C++ 控制台应用程序,其中包含许多主要围绕 Rectangle() 和 FillRect() 旋转的 wingdi 图形,但由于它是 wingdi,图形不是永久性的。当我最小化控制台、放大控制台、向下滚动等等时,图形会重置。我在某些线程中看到没有预定义的解决方案,因此您必须自己制作一个。
我试过的一件事是绘制一次矩形,然后附加一个无限循环的线程,在每次迭代中检查矩形的第一个像素,如果它的颜色是黑色,它会再次绘制整个矩形。听起来很傻,这就是我能想到的。我知道这是完全没有效率的。还有其他解决方案吗?
虽然您已经能够使用 GDI 在您的应用程序的控制台上绘制 window(大概是通过调用 GetConsoleWindow
然后 GetDC
),但它并不是真正为那。系统有控制台 window 的代码,它会在需要更新时尝试重新绘制 window 本身。它不知道您的程序通过 GDI 执行的任何操作,因此无法保留它。
如果您只需要在控制台上绘制彩色矩形 window,您可以使用 Console API 来完成这些事情。您可以根据需要设置文本颜色并绘制空格块或块字符。
如果你想做更通用的图形,你的程序将必须创建一个(非控制台)window,然后你可以在你的 window 收到 WM_PAINT留言。
我正在制作一个 C++ 控制台应用程序,其中包含许多主要围绕 Rectangle() 和 FillRect() 旋转的 wingdi 图形,但由于它是 wingdi,图形不是永久性的。当我最小化控制台、放大控制台、向下滚动等等时,图形会重置。我在某些线程中看到没有预定义的解决方案,因此您必须自己制作一个。
我试过的一件事是绘制一次矩形,然后附加一个无限循环的线程,在每次迭代中检查矩形的第一个像素,如果它的颜色是黑色,它会再次绘制整个矩形。听起来很傻,这就是我能想到的。我知道这是完全没有效率的。还有其他解决方案吗?
虽然您已经能够使用 GDI 在您的应用程序的控制台上绘制 window(大概是通过调用 GetConsoleWindow
然后 GetDC
),但它并不是真正为那。系统有控制台 window 的代码,它会在需要更新时尝试重新绘制 window 本身。它不知道您的程序通过 GDI 执行的任何操作,因此无法保留它。
如果您只需要在控制台上绘制彩色矩形 window,您可以使用 Console API 来完成这些事情。您可以根据需要设置文本颜色并绘制空格块或块字符。
如果你想做更通用的图形,你的程序将必须创建一个(非控制台)window,然后你可以在你的 window 收到 WM_PAINT留言。