Bei DoModal() keine Änderung möglich?
-
Hallo
Ich hab hier eine Anwendung mit 2 Dialogfeldern.
Wenn ich auf den einen Button klicke, soll das andere Dialogfenster geöffnet werden und den dort Deaktiven Button aktivieren.Wenn ich den Code so mache, funzt das wunderbar
Aufruf = new Pipo; Aufruf->Create(IDD_Seite1,NULL); Aufruf->ShowWindow(SW_SHOWNORMAL); Aufruf->pBoxOne->EnableWindow(TRUE);
Wenn ich das aber so mache, öffnet er mir den Dialog, setzt den Button aber nicht auf aktiv und wenn ich das geöffnete Dialogfenster dann schließe, spuckt er mir nen Fehler aus.
Aufruf = new Pipo; Aufruf->DoModal(); Aufruf->pBoxOne->EnableWindow(TRUE);
-
Du musst das wenn vor dem DoModal machen, oder
in dem Dialog die OnInitDialog überschreiben.Devil
-
vor dem DoModal() hab ich das schon probiert
da öffnet er mir nicht mal das fenster und fängt gleich mit der Fehlermeldung an
-
MSS-Software schrieb:
vor dem DoModal() hab ich das schon probiert
da öffnet er mir nicht mal das fenster und fängt gleich mit der Fehlermeldung anWieso machst du das nicht einfach im dialog selber?
gegebenenfalls kannst du ja beim erzeugen des objektes ein argument mitgeben, ob dein control angezeigtz werden soll oder nicht.
-
Vor dem DoModal KANN das nicht gehen, weil der Button erst nach OnInitDialog existiert.
Mach doch eine bool Variable in den aufgerufenen Dialog und setze die vor DoModal (das geht, ist ja kein Control).
Dann kannst du in OnInitDialog (nach dem Aufruf der Basisklasse) den Knopf aktivieren.Aber: Wenn du den stur aktivierst und da nix dynamisches ist, warum dann der Aufwand mit dem Zugriff von außen?
Und: Gestern wolltest du noch was im Hintergrund ausführen. DoModal und "im Hintergrund" schließt sich aus. Die aufrufende Funktion wartet so lange, bis der modale Dialog wieder zu ist.
-
also: das ganze hat den hintergrund, dass ich ein anderes programm habe. dieses programm führt bestimmte routinen durch und während die ausgeführt werden, soll ein dialogfeld geöffnet werden, dessen Button "OK" erst dann aktiv gesetzt werden soll, wenn die Routine erfolgreich durchlaufen ist. und jetzt wollte ich halt nur wissen, ob ich da halt bei DoModal() eingeschränkt bin
abgesehen davon muss ich dabei das DoModal() eh weglassen, weil der mir sonst die Routine nicht weiter durchläuft
-
Wie findet die Kommunikation mit dem anderen Programm statt?
-
das ist ein programm
sprich: button1 klick, dialog öffnet, routine startet
-
[KLUGSHIT]
So wie du es schreibst hast du 2 verschiedenen Programme.[/KLUGSHIT]
Aufruf->pBoxOne->EnableWindow(TRUE);
Das es hier einen Fehler gibt ist klar. Der Dialog existiert nicht mehr und somit gibt es das Steuerelement auch nicht.
Wo läuft deine Funktion ab?
Du hast die Möglichkeit deine Funktion in einen Thread auszulagern. Dadurch bleibt die GUI bedienbar und du kannst eine Dialog öffnen und was damit machen.
Nun muss Du dich aber um die Syncronisierung bemühren.Du kannst eine Dialog NICHTMODAL öffnen so wie du es schon gezeigt hast. Die zeitaufwendige Funktion lauft dann nach dem öffnen des Dialogs.
Du kannst eine Modalen DLG öffnen und deine zeitaufwendige Funktion in diesem starten.
Die letzteren sind für Anfänger geeignet um zu testen da einfach.
Fortgeschr. machen das mit Threads.