我在Borland C ++(Delphi)程序中为OnPaint
事件提供了一个简单的实现。在MDI子级的OnPaint
中,绘制了一个网格,在网格内部,我显示了许多位图。
当我打开/创建一个新窗口时,会发生以下情况:
显示窗口。
有一个OnPaint
事件,在该事件中,我绘制了网格和位图,但是某些位图没有完全显示,窗口中有些行显示了位图的一部分。没有显示。
然后发生下一个OnPaint
事件,调用相同的代码,现在所有位图都被完全绘制。
该程序的其他用户报告了2个以上的OnPaint
事件,并且在位图中的失败类似。
我包括一个计数器,在我的情况下,计数器显示OnPaint
在创建新窗口时总是被两次调用,当窗口由于移动而重新绘制时,OnPaint
仅打电话一次。我禁用了一些绘图代码,以查看此处是否引起第二次调用,但这不是事实。
请问对此行为有一个更好的解释吗?
void __fastcall TfrmSpoor::FormPaint(TObject *Sender)
{
... do some calculations
HorzScrollBar->Increment = PixelsPerHokX;
HorzScrollBar->Range = PixelsPerHokX * Railplan->xGrootte;
VertScrollBar->Increment = PixelsPerHokY;
VertScrollBar->Range = PixelsPerHokY * Railplan->yGrootte;
CanvasOffsetX = (int)-HorzScrollBar->Position % PixelsPerHokX;
CanvasOffsetY = (int)-VertScrollBar->Position % PixelsPerHokY;
Canvas->Lock(); // reserveert de Canvas voor deze thread
OnPaintTeller++;
Color = temp.GeefSymboolKleur(Vormgeving->SymboolGrootte);
... do some more calculations
{
TekenRaster(Canvas, Deelplan);
TekenRailplan(Canvas, Deelplan, true);
}
// Set some Buttons to visible:
ToonESTWRegels(Vormgeving->SymboolGrootte == SG_ESTW && Vormgeving->ESTWButtons);
Canvas->Unlock(); // release Canvas
}