Hintergrundbild?

Hallo,

ich möchte in mein Programm ein Hintergrundbild einfügen, weiss aber nicht wie das geht, benutze Vistal C++ 6.0 (Autoren Edition) und kann aber wenn ich ein normales großes Bild einfüge, 1. nicht mehr Buttons darüber anordnen und 2. wird die Entwicklungsoberfläche richtig langsam. Wäre toll, wenn ihr mir helfen könntet…

Stephan

Hi Stephan,

ich gehe mal davon aus, daß Du das Hintergrundbild in einen Dialog einblenden willst.

Baue Dir erst mal Deinen Dialog zusammen, OHNE irgend ein Bild einzublenden, und lasse dann von dem Klassenassistenten eine Klasse für diesen Dialog erstellen.

Nehmen wir an, Deine Dialogklasse heißt CMyDialog. Füge dieser Klasse die folgende (private) Member-Variable hinzu:

HBRUSH m\_hbrushBackground; // unser Hintegrundpinsel

Diese Variable muß im Konstruktor der Dialogklasse initialisiert werden. Wie die Initialisierung aussieht, hängt davon ob, ob Du das Bild aus einer Datei laden möchtest, oder ob das Bild in den Ressourcen abgelegt ist.

Hier ist der Code für die Initialisierung, wenn Du das Hintergrundbild aus einer Datei laden willst:

CMyDialog::CMyDialog(.......
{
 // ...

 // Bitmap aus Datei laden:
 HBITMAP hbmpBackground;
 hbmpBackground=(HBITMAP)LoadImage(NULL,
 "bg.bmp", // Dateiname des Bildes, evt. Pfadangabe hinzufügen
 IMAGE\_BITMAP, 0,0, 
 LR\_LOADFROMFILE | LR\_CREATEDIBSECTION | LR\_DEFAULTSIZE);

 //aus dem geladenen Bitmap den Hintegrund-Pinsel erstellen:
 m\_hbrushBackground=CreatePatternBrush(hbmpBackground);
}

Wenn Du das Bitmap aus den Ressourcen laden möchtest, mußt Du folgende Initialisierung verwenden:

CMyDialog::CMyDialog(.......
{
 // ...

 // Bitmap aus Ressource laden:
 HBITMAP hbmpBackground;
 CBitmap bmpBackground;
 bmpBackground.LoadBitmap(IDB\_BACKGROUND); 
 // =\> IDB\_BACKGROUND ist die Ressource-ID des Bildes
 hbmpBackground=HBITMAP(bmpBackground);

 //aus dem geladenen Bitmap den Hintegrund-Pinsel erstellen:
 m\_hbrushBackground=CreatePatternBrush(hbmpBackground);
}

Soviel zur Initialisierung. Jetzt mußt Du nur noch dafür sorgen, daß dieser Pinsel verwendet wird, um den Hintergrund des Dialoges zu zeichnen. Dafür fügst Du der Dialogklasse mit dem Klassenassistenten eine Behandlungsroutine für die Nachricht „WM_CTLCOLOR“ hinzu. Diese Behandlungsroutine änderst Du dann folgendermaßen ab:

HBRUSH CMyDialog::open\_mouth:nCtlColor(CDC\* pDC, CWnd\* pWnd, UINT nCtlColor) 
{
 HBRUSH hbr = CDialog::open\_mouth:nCtlColor(pDC, pWnd, nCtlColor);

 // neuer code:
 // wird der Hintergrund des Dialoges neu gezeichnet?
 if (nCtlColor==CTLCOLOR\_DLG)
 // ja=\> dann verwende den Hintergrundpinsel mit dem Bitmap:
 hbr=m\_hbrushBackground;

 return hbr;
}

Und das wär’s dann auch schon. Ich hoffe, der Code hilft Dir weiter.

Viel Erfolg!
Uwe

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]