gpt4 book ai didi

delphi - Delphi/Builder/VCL,在不丢失双缓冲的情况下覆盖表格的WM_PAINT?

转载 作者:行者123 更新时间:2023-12-03 18:23:35 24 4
gpt4 key购买 nike

我使用的是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也不是,所以我我没有找到一种方法可以解决这个问题。

我知道我可以创建自己的双缓冲,但是如果可能的话,我宁愿使用已经存在的缓冲。我计划将此设计也带到其他控件上,而不仅仅是我的表单。

最佳答案

覆盖Paint方法,而不是尝试处理WM_PAINT消息。这样,用于双缓冲的内置机制将仍然有效,但是您可以自定义绘画。

关于delphi - Delphi/Builder/VCL,在不丢失双缓冲的情况下覆盖表格的WM_PAINT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com