OnPaint事件始终被调用两次

时间:2019-03-30 17:17:57

标签: c++builder vcl

我在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 
}

0 个答案:

没有答案
相关问题