Hintergrundbild auf eine MDI-Form malen

  • MDI Forms bieten standardmäßig keine Möglichkeit darauf Grafik zu malen, man muß sich mit einem eigenen Canvas-Objekt behelfen
  • imgBackImage beinhaltet das Hintergrundbild, das auf die Form kopiert wird
  • Problem dabei ist, dass alle auf der Form befindlichen Objekte übermalt werden, auch die Child-Windows. Man muß also erreichen, dass diese sich alle neu zeichnen.
void __fastcall TfrmMain::RepaintBackGround()
{
    int iTop = 48;
    int iLeft = 0;
    int iWidth = this->Width - iLeft;
    int iHeight = this->Height - iTop;

    TRect SourceRect, DestRect;

    // Ausschnitt aus dem Quellbild definieren
    SourceRect = Rect(0, 0, iWidth, iHeight);

    // Zielrechteck definieren
    DestRect = Rect(iLeft, iTop, iWidth, iHeight);

    TCanvas * FCanvas = new TCanvas();

    if (FCanvas)
    {
        // auf die akt. Form malen
        FCanvas->Handle = GetWindowDC(Handle);
        SetBkMode(FCanvas->Handle, TRANSPARENT);

        // Quelle in das Ziel kopieren
        FCanvas->CopyRect(DestRect, imgBackImage->Picture->Bitmap->Canvas, SourceRect);

        delete FCanvas;
    }
}