Anfänger verzweifelt: (Bitmap)button mit Bild initialisieren
-
Hallo,
bitte habt Nachsicht, wenn die Frage völlig doof ist oder total unverständlich formuliert: bin blutiger Anfänger, soll schnell, schnell für die Arbeit ein kleines Programm schreiben mit VS2008, und hatte kaum Zeit, mich einzuarbeiten.
Also: ich habe eine SDI-Anwendung erstellt, in der über einen Menüpunkt mit Dlg.Domodal ein neues Dialogfenster geöffnet wird. Auf diesem neuen Dialogfenster will ich einen Bitmap-Button erstellen, der gleich beim Öffnen des Fensters das Bitmap anzeigt.
Denke, ich muss die OnInitDialog()-Funktion in der Dlg-Klasse dazu überschreiben.
Egal, was ich versucht habe, wie z.B.
CBitmapButton m_button;
CBitmapButton.Autoload(IDOK,this)
oder
HBITMAP mybitmap=LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
CButton * pBu = (CButton*)GetDlgItem(ID_OK);
pBu -> SendMessage(BM_SETIMAGE, IMAGE_BITMAP,(long) mybitmap);, das Programm stürzt bei der internen Stelle ASSERT (::isWindow(m_hwnd),...) in den Funktionsdefinitionen von Autoload,SendMessage ...
Das Problem scheint irgendwie zu sein, dass das Dialogfenster oder der Button noch nicht konstruiert ist, oder sehe ich das falsch?
Kann mir irgendjemad helfen? Wie geht das denn richtig mit dem Initialisieren des Buttons? Was ist los mit den Fenstern?
Vielen, vielen Dank!
-
IDOK ist ein normaler Button. Du musst den Button erst Duch einen Subclass (SubclassDlgItem) an Dein CBitmapButton Objekt binden.
Du kannst einen normalen CButton nicht in einen CBitmapButton casten!
-
Schau mal bei www.codeproject.com vorbei, da gibt es jede Menge Beispiele, z.B. http://www.codeproject.com/KB/buttons/betterbmpbutton.aspx
-
Vielen Dank für Eure Antworten!! Vor allem den Link.
Hab das Problem gelöst, indem ich im InitDialog zuerst das Fenster generieren liess und danach die Button initialisiert habe.
public
CButton m_ctlButton; // Control Variable für IDC_BUTTON1
C_Bitmap m_Bitmap;
BOOL CDlg::InitDialog()
{
CDialog::OnInitDialog();
m_Bitmap.LoadBitmap(IDB_BITMAP1);
m_ctlButton.SetBitmap(m_Bitmap);
}