Bitmap einem Button auf modalem Dialog zuweisen



  • Hallo,

    ich versuche gerade einem Button, der sich in einem modalen Dialogfeld befindet
    eine Bitmap zuzuweisen.

    In einem normalen Dialogfeld war es bisher kein Problem:

    1. Bitmap in Resourcen laden: IDB_PICTURE1.

    2. Membervariable für Button erstellen: m_cButton1

    3. Funktion erstellen, die in der OnInitDialog aufgerufen wird:

    void CProgramm::OnSetBitmap()
    {
    HINSTANCE hInstance = AfxGetInstanceHandle();
    HBITMAP hBitmap = LoadBitmap (hInstance, MAKEINTRESOURCE(IDB_PICTURE1);
    m_cButton1.SetBitmap(hBitmap);
    }
    

    4. Button im Eigenschaftsfeld auf Bitmap = TRUE setzen.

    Wenn ich das Gleiche im modalen Dialogfeld mache, wird beim Aufrufen der Fkt.
    SetBitmap(hBitmap) eine Exception ausgelöst.

    Was mache ich denn falsch...komme nicht drauf.

    Vielen Dank,
    Krommi


  • Mod

    Wie machst Du das? Evtl. bevor Du CDialog::Create aufgerufen hast? Dann existiert der Button nämlich noch nicht.



  • Ich öffne den zweiten Dialog (in dem sich der besagte Button befindet) über ein Klickereignis
    im Hauptdialogfeld mit der Methode DoModal().

    Weil VC++ für mein zweites Dialogfeld nicht automatisch die Funktion OnInitDialog() angelegt hat, hab ich diese noch manuell eingefügt und starte den Aufruf OnSetBitmap() von dort aus. Im Debugger kann ich sehen, dass diese Funktion ordnungsgemäß gestartet wird, aber in der letzten Zeile:

    m_cButton1.SetBitmap(hBitmap)
    

    stürzt das Programm ab.

    Hmm...was macht das Programm denn im Hauptdialogfeld anders, da ich dort ebenfalls Bitmaps auf diesem Wege auf Buttons bringe und es dort funktioniert?

    Von wo aus kann ich denn die Funktion zum Einfügen der Bitmaps aufrufen um sicherzugehen, dass das Fenster und die Buttons zu dem Zeitpunkt schon erstellt wurden? Gibt es ein Ereignis, das ich hierfür nutzen kann?

    Danke und Gruß,
    Krommi



  • Ok, ich habe schon mal den Fehler gefunden:

    Es liegt an der OnInitDialog() die ich für das modale Dialogfeld selbst anlege.
    Ich denke, dass die Funktion schon durchlaufen wird, bevor der Button erstellt ist.

    Nun meine letzten Fragen 🙂

    - Welche Funktion kann ich benutzen, um beim Erstellen des modalen Dialogs
    automatisch die Bitmap dem Button zuzuweisen???

    - ...oder um auch sonstige Operationen durchzuführen, die gleich zu Beginn
    stattfinden sollen, wenn das modale Fenster geöffnet wird???

    Krommi


  • Mod

    Das ist nicht richtig. OnInitDialog wird erst aufgerufen wenn ale Controls erzeugt wurden.
    Hast Du evtl. die Basis Klasse CDailog::OnInitDalog nicht aufgerufen?



  • Genau das war das Problem.

    Vielen, vielen Dank für den Tipp.

    Schöne Grüße,
    Krommi



  • Hmm lass dir am besten dem nächst sowas immer vom Assistenten machen ... da kommt dann so nen Fehler garnet erst zu stande ...


Anmelden zum Antworten