tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
527
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Rudi Raser Rudi Raser ist offline Grünschnabel
    Registriert seit
    Mar 2004
    Beiträge
    2
    Hallo zusammen,

    wo genau ist hier der Unterschied:

    1)
    CWaitDialog *pDlg;
    pDlg = new CWaitDialog;
    pDlg->Open("",0,0);

    2)
    CWaitDialog test;
    test.Open(" ",0,0);

    Rufe ich eine nicht modale Dialogbox mit 1) auf geht alles. Rufe ich sie mit 2) auf erscheint kurz die Box und wird sofort wieder mittels destroy aufgelöst. Ich würde Sie aber gerne mit 2) aufrufen, was mache ich da falsch?

    Source sieht so aus

    CWaitDialog::Open(CString message, short nLower, short nUpper)
    {
    Create(IDD_MELDUNG);
    CenterWindow();
    SetDlgItemText(IDC_MELDUNG,message);
    ShowWindow (SW_SHOW);
    m_progress.SetRange(nLower,nUpper);
    UpdateWindow();
    }

    Was mache ich falsch?

    Gruß
    Rudi
     

  2. #2
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    1)
    CWaitDialog *pDlg;
    pDlg = new CWaitDialog;
    pDlg->Open("",0,0);
    Hier wird ein CWaitDialog-Objekt auf dem Heap mit new alloziert. Es existiert so lange, bis es deleted wird. Wenn das nicht passiert, entsteht ein Memory-Leck, das sogar nach Beendigung deines Progamms bestehen bleibt.

    2)
    CWaitDialog test;
    test.Open(" ",0,0);
    Dieses CWaitDialog-Objekt wird auf dem Stack erzeugt. Es ist lokal und damit temporär und wird zerstört, sobald die Verarbeitung den Gültigkeitsbereich des Objektes (den {}-Block) verlässt, in dem es deklariert wurde. Wahrscheinlich sorgt der bei der Zerstörung aufgerufene Destruktor dafür, dass das Fenster entsprechend geschlossen wird.
    Lokale, temporäre Dialogobjekte solltest du nur erzeugen, um sie modal mit DoModal() zu öffnen. Die Verarbeitung wird erst nach dem DoModal() fortgesetzt, wenn der Dialog wieder geschlossen wird und deshalb wird auch der Gültigkeitsbereich nicht zuvor verlassen.
    Geändert von Kachelator (14.03.04 um 17:34 Uhr)
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  3. #3
    Rudi Raser Rudi Raser ist offline Grünschnabel
    Registriert seit
    Mar 2004
    Beiträge
    2
    JA! Das ist die Erklärung Danke!

    Jetzt habe ich aber ein neues Problem. Erzeuge ich per 2) meinen nicht modalen Dialog wird er so lange offen gehalten bis der Gültigkeitsbereich zu Ende ist, dann wird der Destructor aufgerufen welcher das Fenter schließt. So weit alles ok. Allerdings kann ich das geöffnete Fenster weder verschieben noch regiert ein Button darin. Wo kamm das jetzt wieder dran liegen?

    Erzeuge ich das Objekt mit 1) geht natürlich alles.
     

  4. #4
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Die zweite Möglichkeit ist eigentlich die richtige für modale Dialoge, also welche, die das restlcihe Programm stoppen, bis die von ihnen geforderten Eingaben gemacht ('Okay' gedrückt oder so) worden sind und sie geschlossen werden. Für deinen nicht modalen (modeless) Dialog solltest du tatsächlich die new-Methode benutzen und den verwendeten Pointer eventuell zum Member des Hauptfensters machen.

    Was das von dir genannte Verhalten verursacht, kann ich auch nicht genau sagen.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

Ähnliche Themen

  1. Erst hier lesen, dann hier posten
    Von zerix im Forum XML Technologien
    Antworten: 0
    Letzter Beitrag: 20.06.08, 07:55
  2. Wo besteht hier der Unterschied?
    Von meilon im Forum Javascript & Ajax
    Antworten: 10
    Letzter Beitrag: 14.01.05, 19:56
  3. Unterschied PHP ASP
    Von Jack im Forum PHP
    Antworten: 8
    Letzter Beitrag: 19.08.02, 18:16
  4. unterschied
    Von black-dog im Forum Photoshop
    Antworten: 15
    Letzter Beitrag: 23.03.02, 12:35
  5. Was is da der Unterschied
    Von Jack im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 8
    Letzter Beitrag: 18.08.01, 23:52