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]