Init von neuer Dialogbox

opi6k

Grünschnabel
highlow

hab folgendes Problem:
ich habe eine dialogbasierende MFC Anwendung.
z.zt. habe ich einen Startdialog (MainDlg) von dem aus dann mehrere neue dialoge geöffnet werden. Bei einem wird im Hintergrund ein Prozess gestartet, der mir übers netzwerk den status eines gerätes ausliest. Diesen prozess möchte ich starten sobald das fenster offen ist.
(also nach doModal). hab versucht eine OnInitDialog methode anzulegen, da bekomme ich das problem eines rekursiven aufrufs - hmmm
jetzt habe ich mal einen button (start scan) im Dialog plaziert, mit dem ich den prozess starte... muss doch auch anders gehen - oder?
übrigens: vor doModal (dh. bevor dialogfenster geöffnet wird) denke ich is nicht gut, da ich statusmeldungen in dem neuen fenster ausgeben möchte und ich nicht weis obs schon da ist...

danke

otmar
 
Hallo otmar,

also richtig so richtig kapiert habe ich deine Ausführungen nicht, aber vielleicht hilft dir folgende Info weiter:
Wenn du einen Dialog mit "DoModal()" startest, dann bleibt die Befehlsausführung des aufrufenden Programmes solange an dieser Stelle stehen, bis der aufgerufene Dialog wieder geschlossen wird. Wenn also direkt nach Anzeige eines solchen Dialogs was ausgeführt werden soll bzw. noch weitere Dialoge geöffnet werden sollen, geht das nur mit nichtmodalen Dialogen. Diese werden mit "Create()" und "ShowWindow()" erzeugt und angezeigt.

Dein Problem mit dem rekursiven Aufruf verstehe ich gar nicht. Ebenso steige ich nicht richtig durch welche Aktion in welchen Dialog (StartDialog oder Statusdialog) ausgeführt wird bzw. werden soll :confused:

Gruß
MCoder
 
hallo

@MCoder:
danke für deine Antwort - tut mir leid für die schlechte Erläuterung...
ich versuchs nochmals - aber vielleicht gehts eh nicht wie du schon erwähnt hast, trotzdem:
In meinem "Startdialog:" MonitoringDlg.cpp wird über einen Button (Aktion: OnBnClicked...)
ein zweiter Dialog: CSPS_Ctrl_Dlg aufgerufen:

CSPS_Ctrl_Dlg dialog;
dialog.DoModal();

In diesem möchte ich jetzt meinen task starten - ich dachte (vielleicht falsch gedacht) am besten in einer "init routine":

virtual BOOL OnInitDialog();

wenn ich diese Methode in meinem Dialog (Klasse) einfüge bekomme ich die Compilerwarnung:

warning C4717: 'CSPS_Ctrl_Dlg::OnInitDialog' : recursive on all control paths, function will cause runtime stack overflow

...und das tut er dann auch... wenn er läuft....

und melde sich dann:

Unhandled exception at 0x004b7b39 in Monitoring.exe: 0xC00000FD: Stack overflow.

...hhmmm...

danke
otmar
 
Hallo otmar,

die Routine OnInitDialog() ist schon der richtige Weg. Die Ursache der Fehlermeldung ist aber ohne weiteres nicht zu erkennen. Was steht denn in 'CSPS_Ctrl_Dlg::OnInitDialog' drinnen?

Gruß
MCoder
 
Hallo MCoder,

:eek: :eek: :eek:

...uiuiuiui...
hast recht - hab da einen "topfen" in meinem Inhalt gehabt ....
jetzt ts auch in der OnInitDialog methode - supa

recht vieeelen Dank MCoder

muss schon sagen - tolles Forum - tolle User
schönen Tag noch

otmar
 

Neue Beiträge

Zurück