我输出了一个由Bitblt
创建的图像(位图)。
现在我想摆脱它。我能怎么做? (不要使用补丁,如FillSolidRect
等)
答案 0 :(得分:2)
无法撤消"或"擦除"一个BitBlt或任何其他绘图输出(非常特殊情况除外,您可以执行基于XOR的绘图,您可以通过在原始绘图上执行另一个XOR绘图操作来撤消)。
你唯一能做的就是在它上面绘制其他东西,这就是你所说的"补丁"。通常,您将绘制窗口背景颜色的实心矩形。这正是OnEraseBkgrnd
消息处理程序默认执行的操作,它在OnPaint
之前运行。具体来说,它使用您的窗口类的背景画笔,它通常是使用COLOR_3DFACE
(对话框)或COLOR_WINDOW
(对于窗口)系统颜色绘制的画笔。
当然,你总是可以不首先做BitBlt。 所有绘制代码应始终进入OnPaint
消息处理函数内部,因此您无法最终使用" stale&#34 ;图形。每当窗口需要重新绘制时,它将调用此函数,并且该函数内的代码将重新绘制窗口。如果您不希望使用位图进行绘制,请不要调用BitBlt。
如果您在窗口顶部使用临时CDC
对象(您通常不正在进行)对比完成了BitBlt,则可以强制删除此对象通过触发窗口的重绘。最简单的方法是使用窗口的InvalidateRect()
成员函数;传递NULL
作为指向要使其无效的矩形的指针将使窗口的整个客户区无效,或者您可以使您的区域无效。