Eigene Dialogbox Fehler



  • Hallo,
    ich lese eine Bitmap von Datei und Möchte sie während des Laufzeits auf meine Eigene Dialogbox zeigen.
    Ich bekomme Fehler in der Zeile

    eigendialogVariable.m_ctlBild.SetBitmap((HBITMAP)LoadImage(NULL,"E:\\Anwendungen\\Bilder\\DEFAULT.bmp", IMAGE_BITMAP, 200 , 200, LR_LOADFROMFILE | LR_CREATEDIBSECTION ));
    

    Obwohl beim Komplieren 0 Fehler.

    Kann jemand mir hier helfen



  • Zeig bitte mal noch ein paar Zeilen danach, ich vermute du rufst danach irgendwann eigendialogVariable.DoModal auf - das würde alles erklären, denn vor DoModal existiert m_ctlBild noch nicht (als Fenster) und du versucht in Speicher zu schrieben, der nicht reserviert ist.

    Gib dem Dialog den Dateinamen, ruf DoModal auf und mach SetBitmap erst in OnInitDialog nach Aufruf der Basisklasse.

    PS: public Membervariablen sind böse! 😉 (Sollte man nicht machen.)



  • Hallo estartu,
    ich habe dich vermisst.
    estartu Schrieb

    ich vermute du rufst danach irgendwann eigendialogVariable.DoModal auf - das würde alles erklären, 
    denn vor DoModal existiert m_ctlBild noch nicht (als Fenster) und du versucht in Speicher zu schrieben, der nicht reserviert ist.
    

    Richtig.

    Meine Code

    CProduct_LabelDlg prodLabelVar;		
     prodLabelVar.m_ctlBild.SetBitmap((HBITMAP)LoadImage(NULL,"meinbild.bmp", IMAGE_BITMAP, 200 , 200, LR_LOADFROMFILE | LR_CREATEDIBSECTION ));
    
    if(prodLabelVar.DoModal()==IDOK)
    {
    }
    

    estartu schrieb:-

    Gib dem Dialog den Dateinamen, ruf DoModal auf und mach SetBitmap erst in OnInitDialog nach Aufruf der Basisklasse.
    

    kannst du mehr dazu sagen , da ich lange Zeit mit dem Problem verbraucht habe.
    Wie mache ich setbitmap in OnInitDialog.

    Mein Programm soll so sein:-
    Der Benutzer sucht nach Product in DB
    Wenn er es findet soll die angaben über dieses Product auf eigene dialogbox zeigen und zwar mit dem Bild.



  • 🙂

    Also, du machst eine public CString Variable (ja, ich habe gerade gesagt, sowas soll man nicht, aber alles andere ist so lang zu erklären... du könntest den String nämlich auch dem Konstruktor geben).
    Und dann sieht der Code etwa so aus:

    CProduct_LabelDlg prodLabelVar;       
    prodLabelVar.m_strPfadZumBild = "meinbild.bmp";
    
    if(prodLabelVar.DoModal()==IDOK)
    {
    }
    

    Und im Dialog:

    BOOL CKkKarteDlg::OnInitDialog() 
    {
    	CDialog::OnInitDialog();
    	m_ctlBild.SetBitmap((HBITMAP)LoadImage(NULL,m_strPfadZumBild, IMAGE_BITMAP, 200 , 200, LR_LOADFROMFILE | LR_CREATEDIBSECTION ));
    
    	return TRUE;  // return TRUE unless you set the focus to a control
    	              // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
    }
    


  • BOOL CKkKarteDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
    m_ctlBild.SetBitmap((HBITMAP)LoadImage(NULL,m_strPfadZumBild, IMAGE_BITMAP, 200 , 200, LR_LOADFROMFILE | LR_CREATEDIBSECTION ));

    return TRUE; // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zurückgeben
    }

    aber m_ctlBild ist kein variable der hauptdialog sondern vom
    CProduct_LabelDlg (zweite Dialogbox)



  • Dann schreibst du das halt in dessen OnInitDialog()-Methode 😉



  • Wir kommen ans Ziel langsam.
    Es gibt dort kein Oninitdialog.
    nur das Hauptdialog



  • Alles klar,
    ich habe nicht gewusst , dass für jede Dialog ein OnInitDialog gäbe.
    Habe eine gemacht und hat funktioniert.
    Ich danke euch sehr.
    Ich kann jetzt mein Projekt zu Teil abschliessen.

    Gut für ein Freitag vor Feierabend.

    😋 🕶 😉 😃 🙂



  • dokdok2 schrieb:

    aber m_ctlBild ist kein variable der hauptdialog sondern vom
    CProduct_LabelDlg (zweite Dialogbox)

    Oh, entschuldige, das kommt davon wenn man beim Tippen zigmal gestört wird...
    Statt CKkKarteDlg (so heißt die Klasse wo ich rauskopiert habe) sollte da CProduct_LabelDlg stehen.

    Aber du hast es ja herausgefunden. 👍
    Das ist dann sowieso besser, weil du mehr dabei gelernt hast.

    Schönes Wochenende! 🙂



  • Natürlich habe ich viel gelernet.
    ich habe immer 2te Dialog in anderen Applikationen begrenzt benutzt.
    Jetzt kann ich vollgas damit geben.

    Schönes Wochenende.


Anmelden zum Antworten