ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
527
527
EMPFEHLEN
-
14.03.04 02:04 #1
- 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
-
14.03.04 07:49 #2
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
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.1)
CWaitDialog *pDlg;
pDlg = new CWaitDialog;
pDlg->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.2)
CWaitDialog test;
test.Open(" ",0,0);
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."
-
14.03.04 12:17 #3
- 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.
-
14.03.04 17:38 #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
-
Erst hier lesen, dann hier posten
Von zerix im Forum XML TechnologienAntworten: 0Letzter Beitrag: 20.06.08, 07:55 -
Wo besteht hier der Unterschied?
Von meilon im Forum Javascript & AjaxAntworten: 10Letzter Beitrag: 14.01.05, 19:56 -
Unterschied PHP ASP
Von Jack im Forum PHPAntworten: 8Letzter Beitrag: 19.08.02, 18:16 -
unterschied
Von black-dog im Forum PhotoshopAntworten: 15Letzter Beitrag: 23.03.02, 12:35 -
Was is da der Unterschied
Von Jack im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 8Letzter Beitrag: 18.08.01, 23:52





Zitieren
Login






