Dialog wird ohne Inhalt angezeigt!



  • Hallo Leute!

    Ich hatte so ein ähnliches Problem schonmal, das haber ich damals mit nichtmodalen Dialogen gelöst. Das funktionierte auch prima.
    Jetzt wollte ich selbe Technik nochmal anwenden. Es klappt nicht, der Dialog hat in der Systemzeile System die richtige Dialogbeschriftung, aber der Dialog selbst ist leer.
    Er soll einfach da einen Textaussuchen zur Laufzeit, den er da anzeigt, wenn der Dialog aufgeht. Durch Debugging weiß ich genau, dass er den richtigen text heraussucht und auch setzt in der OnInitDialog() über SetWindowText(), aber wenn der Dialog aufgeht, ist er leer.
    Um zu sehen, ob er überhaupt ein Element annimmt, hab ich das entsprechende Static-Feld im Dialog tiefgestellt, man sollte also wenigstens ne Art Rahmen sehen, aber da ist gar nix.

    Code:

    if(m_child_ptr) m_child_ptr->SetForegroundWindow();
    else
    {
    	m_child_ptr = new CMeldungDlg(this);
    	m_child_ptr->Dlg_kind = IDS_STATIC_MELDUNG_DB;
    	m_child_ptr->Create(CMeldungDlg::IDD,this);
    	m_child_ptr->ShowWindow(SW_SHOW);
    }
    
    m_child_ptr->DestroyWindow();
    

    Hat noch jemand ne Idee??

    Danke, Ranger



  • Ich würd ja als erstes mal sagen die DialogID is falsch. Welche DialogId hat den dein Dialog den du im ResourcenEditor erzeugt hastmit dem StaticFeld????



  • Dann würde er ihn ja nichtmal aufmachen, denn es geht der richtige Dialog auf, nur eben ohne Inhalt, die

    m_child_ptr->Dlg_kind = IDS_STATIC_MELDUNG_DB;
    

    Wenn Du das hier meinst, das gibnt nur an die OnInitDialog() welhcer Text in der Meldungsbox stehen soll.

    Mal ne andere Frage, gibt es Nichtmodale MessageBoxen, also die AfxMessageBox() Teile?

    Danke, Ranger



  • Jetzt wird es für mich noch komischer.

    folgender Code:

    if(m_child_ptr)
    	m_child_ptr->SetForegroundWindow();
    else
    {
    	m_child_ptr = new CMeldungDlg(this);
    	m_child_ptr->Dlg_kind = IDS_STATIC_MELDUNG_DB;
    	m_child_ptr->Create(CMeldungDlg::IDD,this);
    	m_child_ptr->ShowWindow(SW_SHOW);
    }
    AfxMessageBox("Test");
    

    Nach betätigen der "OK" Taste in der Messagebox steht der korrekte Text in dem nichtmodalen Dialog und bleibt bis zum "DestroyWindow()" auch korrekt da stehen.

    Bei folgendem Code:

    if(m_child_ptr)
    	m_child_ptr->SetForegroundWindow();
    else
    {
    	m_child_ptr = new CMeldungDlg(this);
    	m_child_ptr->Dlg_kind = IDS_STATIC_MELDUNG_DB;
    	m_child_ptr->Create(CMeldungDlg::IDD,this);
    	m_child_ptr->ShowWindow(SW_SHOW);
    }
    

    bleibt der nichtmodale Dialog leer.

    In beiden Fällen läuft nach dem "else" eine Verarbeitung im Hintergrund des Programmes ab. Das ganze soll dem Anwender begreiflich machen, dass der PC sich nicht aufgehängt hat, sondern einfach nur arbeitet.

    Hat jemand ne Idee? Gibt es eine nichtmodale Messagebox?

    Danke, Ranger



  • Probier mal ein RedrawWindow(); an der Stelle.



  • Absolute Klasse. Ich danke Dir vielmals.

    ES FUNZT.

    Danke, Ranger 👍 👍 👍



  • Schön, wenns klappt, ist aber, glaube ich, nicht die sauberste Lösung. Kann man wohl noch verbessern...
    Nur das Static statt den ganzen Dialog neu zeichnen wäre da schon ein Anfang.


Anmelden zum Antworten