Hallo zusammen!
Ich lade eine Bitmap aus einer Datei und möchte sie in einem StaticFeld auf meinem Dialog anzeigen lassen.
Das Problem ist, die geladene Bitmap wird für einen Sekundenbruchteil angezeigt, dann sehe ich wieder den grauen Dialoghintergrund.
Also das laden scheint zu funktionieren, nur stimmt irgend etwas mit der OnPaint() Routine nicht.
Ich bin mit dem Debugger durchgegangen und habe die Stelle, die für das Verschwinden der Bitmap verantwortlich ist ausfindig machen können. Leider weiß ich nicht wie ich das beheben soll.
Hier mal der Code zum Laden und zum Anzeigen aus der OnPaint():
Damit wird das Bild geladen
Jetzt Code zum anzeigen ( Ausschnitt aus OnPaint())
An der mit "FEHLER" markierten Stelle wird das Bild dann wieder gelöscht. Wenn ich diese Zeile auskommentiere bleibt das Bild zwar da, allerdings verschwinden dann Buttons im Dialog.
Wo liegt mein Fehler, oder hab ich die ganze Sache ganz falsch angefasst?
Bin noch nicht so erfahren mit MFC.
Danke schonmal!
Gruß Doggy
Ich lade eine Bitmap aus einer Datei und möchte sie in einem StaticFeld auf meinem Dialog anzeigen lassen.
Das Problem ist, die geladene Bitmap wird für einen Sekundenbruchteil angezeigt, dann sehe ich wieder den grauen Dialoghintergrund.
Also das laden scheint zu funktionieren, nur stimmt irgend etwas mit der OnPaint() Routine nicht.
Ich bin mit dem Debugger durchgegangen und habe die Stelle, die für das Verschwinden der Bitmap verantwortlich ist ausfindig machen können. Leider weiß ich nicht wie ich das beheben soll.
Hier mal der Code zum Laden und zum Anzeigen aus der OnPaint():
Code:
void CDlgTestDlg::OnBtLoadImg()
{
CFileDialog dlg(TRUE,"bmp", "*.bmp");
if(dlg.DoModal()==IDOK){
m_pBMP.DeleteObject();
hBitmap = (HBITMAP) ::LoadImage(AfxGetInstanceHandle(),
dlg.GetFileName().GetBuffer(1), IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION);
m_bImgLoaded = true;
// Bitmap erstellen
m_pBMP.Attach(hBitmap);
m_pBMP.GetBitmap(&bm);
AllocUserMem(bm.bmWidth,bm.bmHeight,bm.bmBitsPixel/8);
m_pBMP.GetBitmapBits(bm.bmWidth*bm.bmHeight*bm.bmBitsPixel/8,m_pBuffer); // Bilddaten laden
}
Invalidate();
}
Jetzt Code zum anzeigen ( Ausschnitt aus OnPaint())
Code:
if(m_bImgLoaded){
CClientDC cdc(&m_Display);
CRect rect;
CDC m_pdcMem;
if (!m_pdcMem.CreateCompatibleDC(&cdc))
return;
// Bild zeichnen
m_pdcMem.SelectObject(&m_pBMP);
m_Display.GetClientRect(&rect);
m_pBMP.GetBitmap(&bm);
SetStretchBltMode(cdc,COLORONCOLOR); // Anzeigemodus zur korrekten Anzeige des Bildes
cdc.StretchBlt(0, 0, rect.Width(), rect.Height(),
&m_pdcMem, 0, 0, bm.bmWidth, bm.bmHeight,
SRCCOPY);
}
CDialog::OnPaint(); // <------- FEHLER
}
}
An der mit "FEHLER" markierten Stelle wird das Bild dann wieder gelöscht. Wenn ich diese Zeile auskommentiere bleibt das Bild zwar da, allerdings verschwinden dann Buttons im Dialog.
Wo liegt mein Fehler, oder hab ich die ganze Sache ganz falsch angefasst?
Bin noch nicht so erfahren mit MFC.
Danke schonmal!
Gruß Doggy