2016-12-02 81 views

回答

2

有没有办法“撤销”或“擦除”,你做XOR一个BitBlt的或任何其他图形输出(除非常特殊情况基于图形的绘图,您可以通过在原始顶部执行另一个异或绘制操作来撤消该绘图)。

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

当然,你总是可以只是而不是首先做BitBlt。 全部绘画代码应该总是去掉里面的OnPaint消息处理函数,所以没有办法可以最终得到“陈旧”的图形。每当窗口需要重新绘制时,就会调用该函数,并且该函数内的代码将重新绘制窗口。如果你不希望它被绘制位图,请不要调用BitBlt。

如果你已经使用临时CDC对象(你通常应做),你可以强制使用做了BitBlt的上你的窗口的顶部通过触发窗口的重绘被删除。最简单的方法是使用窗口的InvalidateRect()成员函数;通过NULL作为指向要失效的矩形的指针将使窗口的整个客户区失效,或者可以使您blitting的区域失效。