ComputNik Geschrieben 7. September 2003 Teilen Geschrieben 7. September 2003 Hallo, Ich habe einen Dialog in meinen Resourcen. Diesen will ich außerhalb des "Erzeuger" Fensters Laden. Aufgerufen wird es aus einem Menu. Der Menubefehl funktioniert und ist mit MessageBox erfolgreich getestet. der aufruf lautet: CDialog dlg(IDD_WECKER); dlg.DoModal(); das "Papa" Fenster ist viel kleiner als das Dialog Fenster. Jedenfalls stürzt die anwendung ab und man muss sie richtig abmurxen. Ich hab jedenfalls keine ahnung wie ich das hinbekommen soll. das domodal öffnet zwar den dialog aber im Papa fenster, danach stürzt die anwendung ab. könnt ihr mir sagen wie ich das problem lösen kann? ich bin total fertig mit den Nerven die ganze Nacht durch bis um 7:00 und nix hinbekommen :-( Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. September 2003 Teilen Geschrieben 7. September 2003 Original geschrieben von ComputNik CDialog dlg(IDD_WECKER); dlg.DoModal();Normalerweise verwendet man nicht CDialog selbst, sondern leitet eine Klasse davon ab. Mit der Basisklasse kann man nicht viel machen, außer statische Texte anzuzeigen und abzufragen, ob der Benutzer OK, Abbrechen oder Schließen betätigt hat. das "Papa" Fenster ist viel kleiner als das Dialog Fenster.Das sollte kein Problem sein. Jedenfalls stürzt die anwendung ab und man muss sie richtig abmurxen.Meinst du damit, die Anwendung reagiert nicht mehr? Das liegt dann vermutlich daran, dass DoModal nie zurückkommt. das domodal öffnet zwar den dialog aber im Papa fensterVerstehe ich nicht. Was soll das heißen? könnt ihr mir sagen wie ich das problem lösen kann?Nicht ohne weitere Information darüber, wie der Dialog aussieht, und warum du keine Klasse von CDialog abgeleitet hast. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ComputNik Geschrieben 7. September 2003 Autor Teilen Geschrieben 7. September 2003 So: Ich hab ne Dialoganwendung (eine analoge Uhr). Die Sache Funkitoniert so das ich ein Ziffernblatt aus einer resource lade dann die Zeit ermittel und die Zeiger male. anschließend lade ich die resource wieder und male die Zeiger neu ....... so jetzt hab ich zusätzlich ein Menu angezeigt. Über einen Punkt will ich ein neues Dialogfeld öffnen in dem man dann einen Wecker stellen kann. Da sind dann Checkboxen die Sagen (Wecker verwenden Ja/Nein) Zeit etc... Wenn ich dann im Wecker stellen dialog auf OK klicker soll im Hauptfenster entsprechend auf die Werte reagiert werden. Zur Zeit Klicker ich auf das Menü "Wecker Stellen" das Dialogfeld Wecker öffnet sich im erzeugerfenster. Wird aber da es größer ist als das erzeugerfenster abgeschnitten und nicht vollständig angezeigt. Nach einer Sekunde (Wenn ich die Uhr neu zeichne) verschwindet das dialogfeld "Wecker Stellen". Und nun Ich nix Plan davon wie ich was von irgend wo ableiten soll. im prinzip such ich sowas wie im VB. Wo man sagt Form2.show :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. September 2003 Teilen Geschrieben 7. September 2003 Original geschrieben von ComputNik Da sind dann Checkboxen die Sagen (Wecker verwenden Ja/Nein) Zeit etc... Wenn ich dann im Wecker stellen dialog auf OK klicker soll im Hauptfenster entsprechend auf die Werte reagiert werden.Dann musst du eine Klasse von CDialog ableiten, weil du sonst keine Möglichkeit hast, auf diese Steuerelemente zuzugreifen. Das macht aber der Klassenassistent für dich. Starte den Klassenassistent, während die Dialogresource des Wecker-Dialogs angezeigt wird (z.B. über das Kontextmenü), dann sollte er dich fragen, ob er für diese Dialogresource eine Klasse anlegen soll. Von dieser Klasse legst du dann eine Instanz an (an Stelle von CDialog), ohne Dialog-ID als Parameter. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ITSE Geschrieben 13. September 2003 Teilen Geschrieben 13. September 2003 Außerdem solltest du vielleicht darauf achten, dass du deinen CDialog nicht im Stack anlegst mithilfe lokaler Objekte (z.B. CDialog mydialog() und es danach passiert, dass die Funktion die das Objekt erzeugt hat zu Ende geht. Dann werden nämlich auch alle lokalen Variablen gelöscht, und dein Dialog lebt auch nicht weiter. Erzeuge den Dialog im Stack z.B. CDialog * mydialog; mydialog = new CDialog(); mydialog->doModal(); Nun bleibt dein Dialog auch bestehen wenn die aufrufende Funktion zu Ende geht... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 14. September 2003 Teilen Geschrieben 14. September 2003 Original geschrieben von ITSE CDialog * mydialog; mydialog = new CDialog(); mydialog->doModal(); [/code] Nun bleibt dein Dialog auch bestehen wenn die aufrufende Funktion zu Ende geht... [/b]Aber dann wird der Zeiger mydialog, der ja jetzt auf dem Stack angelegt wurde, zerstört, und man kann die Dialoginstanz nie wieder freigeben -> Speicherleck. Normalerweise ist es unproblematisch, Instanzen von Dialogklassen, die man modal verwenden will, auf dem Stack anzulegen, weil man so vorgeht: - Instanz erzeugen - Initialisieren - Anzeigen mit DoModal - (evtl.) Werte auslesen Wenn der Dialog nicht gerade Informationen von einem zum nächsten Aufruf behalten soll, ist das Anlegen auf dem Heap nicht sinnvoll. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
annita Geschrieben 21. Februar 2005 Teilen Geschrieben 21. Februar 2005 hm.. ich hab zu diesem thema auch noch ein problem... hoffentlich kann mir jemand helfen CNameDlg *mydialog; mydialog = new CNameDlg(); mydialog->doModal(); error C2039: 'doModal' : Ist kein Element von 'CNameDlg' WARUM`? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
annita Geschrieben 21. Februar 2005 Teilen Geschrieben 21. Februar 2005 hm.. ich hab zu diesem thema auch noch ein problem... hoffentlich kann mir jemand helfen CNameDlg *mydialog; mydialog = new CNameDlg(); mydialog->doModal(); error C2039: 'doModal' : Ist kein Element von 'CNameDlg' WARUM`? und wenn ich das benutze tut sich gar nix m_dlgNamen.Create(IDD_Name_2, this); m_dlgNamen.ShowWindow(SW_SHOW); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
annita Geschrieben 21. Februar 2005 Teilen Geschrieben 21. Februar 2005 also ich hab schon ne menge ausprobiert mit zeigern auch schon und mit eigentständigen funktionen... es tut sich nix... kann man vllt mir sagen worauf man achten muss, bzw. was ich vergessen konnte? ach und warum kann man den beitrag nur innerhalb von 15 min ändern... hab ja noch nie gesehn :confused: jetzt spam ich hier ja total rum Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 22. Februar 2005 Teilen Geschrieben 22. Februar 2005 C++ unterscheidet zwischen Groß- und Kleinschreibung. Die Methode heißt DoModal, mit großem D am Anfang. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
annita Geschrieben 22. Februar 2005 Teilen Geschrieben 22. Februar 2005 0 fehler 0 warnungen aber es wird nicht mal ein fenster angezeigt :confused: :confused: :confused: :confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
annita Geschrieben 22. Februar 2005 Teilen Geschrieben 22. Februar 2005 es tut es tut :marine :marine :marine :marine :marine ein hoch auf das nicht vertrauen in vc++ buch Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.