Bitmap laden
-
In einem meiner Programme lade ich zur Laufzeit mehrere Bitmaps:
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP15);
m_button1.SetBitmap(bmp);
bmp.LoadBitmap(IDB_BITMAP18);
m_button6.SetBitmap(bmp);
bmp.LoadBitmap(IDB_BITMAP19);
m_button4.SetBitmap(bmp);Das funktioniert in der Release-Version auch einwandfrei.
Die Debug-Version schmiert an der Stelle ab, wo ich ein zweites Mal bmp benutze, um ein Bitmap zu laden.
Ich müsste also quasi für jeden Button ein eigenes CBitmap erzeugen.Wäre das so trotzdem korrekt, oder kann das auf anderen Rechnern Probleme machen?
Ich ändere die Bitmaps später im Programm auch noch.
-
Ich denke es müsste vielelicht noch eine Methode free() oder eine ähnlcihe geben um den Speicher wieder freizugeben. (HAb die MSDN grad nicht installiert, schau dort am bestem mal nach)
Aber es macht auch keine Probleme wenn du für jedes BNitmap ein CBitmap machst.
Wenn du es nur lokal benötigst kann du es auch ein einen Block setzen (also in einen Klammer Bereich)
-
Versuch mal folgendes
// In Class Dlg initinstanz HBITMAP eigenbitmap; eigenbitmap = ::LoadBitmap(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1)); CButton* pbmp = (CButton*) GetDlgItem(IDC_BUTTON1); pbmp->SendMessage(BM_SETIMAGE, IMAGE_BITMAP, (LONG) eigenbitmap);
-
Nein, es liegt einfach daran, dass ein initialisiertes CBitmap-Objekt kein weiteres Mal initialisiert werden darf, ohne dass geklärt ist, wie die Weiterverarbeitung des Bitmap-Handles aussieht.
Da Du mit SetBitmap das Bitmap an einen Button weitergibst, darf es also vor der Überschreibung nicht gelöscht werden.
Dazu einfach nach SetBitmapbmp.Detach();
aufrufen.
Soll es gelöscht werden, istbmp.DeleteObject();
aufzurufen.
-
OK, danke an alle.
Ich werde alles mal durchtesten.