如何删除Bitblt的输出?(MFC)

How to remove the output of Bitblt? (MFC)

本文关键字:输出 MFC Bitblt 删除 何删除      更新时间:2023-10-16

我输出了一个由Bitblt创建的图像(位图)。

现在我想摆脱它。我该怎么办?(不要使用补丁,如FillSolidRect等)

无法"撤消"或"擦除"BitBlt或任何其他绘图输出(除非在非常特殊的情况下,您可以执行基于XOR的绘图,您可以通过在原始图形上执行另一个XOR绘图操作来撤消)。

你唯一能做的就是在它上面画一些其他东西,这就是你所说的"补丁"。通常,您将绘制窗口背景颜色的实心矩形。这正是OnEraseBkgrnd消息处理程序默认执行的操作,该处理程序在OnPaint之前运行。具体来说,它使用窗口类的背景画笔,该画笔通常是使用COLOR_3DFACE(对于对话框)或COLOR_WINDOW(对于窗口)系统颜色进行绘制的画笔。

当然,你总是可以一开始就不做BitBlt。所有绘制代码都应始终位于OnPaint消息处理程序函数内部,因此不可能最终得到"过时"图形。每当窗口需要重新绘制时,它都会调用此函数,并且该函数中的代码将重新绘制窗口。如果您不希望用位图绘制它,请不要调用 BitBlt。

如果您使用临时CDC对象在窗口顶部完成了 BitBlt(通常不应该这样做),则可以通过触发窗口重绘来强制擦除它。最简单的方法是使用窗口的InvalidateRect()成员函数;将NULL作为指向要失效的矩形的指针传递将使窗口的整个工作区失效,或者您可以只使块状区域失效。