我正在使用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,所以我我没有办法搞定这个。
我知道我可以创建自己的双缓冲,但如果可能的话,我宁愿使用已经存在的东西。我计划将这种设计转移到其他控件上,而不仅仅是我的表格。
答案 0 :(得分:5)
重写Paint
方法,而不是尝试处理WM_PAINT
条消息。这样,双缓冲的内置机制仍然是活动的,但您可以自定义您的绘画。