【发布时间】:2012-02-28 17:21:20
【问题描述】:
我使用的是 BCB6,但它应该和 Delphi 一样,如果我只是在我的表单中添加这样的处理程序:
void __fastcall TForm1::WndProc(TMessage &Message)
处理 WM_PAINT,我没有得到 TWinControl 提供的 DoubleBuffered 的好处。有没有办法在表单上进行一些自定义绘画,尊重 DoubleBuffered 设置(又名写入 TWinControl 创建的内存位图)?
controls.pas 中的这个函数是应用 DoubleBuffered 的地方:
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
它创建一个内存位图,然后再次调用自己。因此,当 Message.DC 为 0 时,我需要一种调用该函数的方法,因此它将创建位图,然后我不会再调用它...但是 WMPaint 不是虚拟的,PaintHandler 也不是,所以我我没有找到一种方法来解决这个问题。
我知道我可以创建自己的双缓冲,但如果可能的话,我宁愿使用已有的。我还计划将此设计应用于其他控件,而不仅仅是我的表单。
【问题讨论】:
-
Delphi7 中的表单(在 BCB 上不确定)有一个 OnPaint 事件,但它没有缓冲,您仍然需要使用简单的 TBitmap 自己完成。