Technician Geschrieben 12. März 2003 Geschrieben 12. März 2003 Hallo, wenn ich mit DoModal ein Dialogfeld anzeigen lasse, so ist dies innerhalb der Anwendung immer im Vordergrund (da ja nichts anderes angeklickt werden kann, bis das Dialogfeld geschlossen wird). Nun möchte ich aber folgendes erreichen: das Dialogfeld soll sich stets im Vordergrund befinden, aber man soll trotzdem etwas anderes in der Anwendung anklicken können. (exakt so wie der Suchen-Dialog in Word - da kann man auch, während das Dialogfeld geöffnet ist, in den Text klicken, ohne dass das Dialogfeld verschwindet). Ich hoffe, ihr könnt mir da weiterhelfen! Grüße, Technician Zitieren
bigpoint Geschrieben 12. März 2003 Geschrieben 12. März 2003 Create CreateIndirect InitModalIndirect Zitieren
Technician Geschrieben 13. März 2003 Autor Geschrieben 13. März 2003 :confused: wie ich aus der MSDN entnehme, erstelle ich damit auch wieder einen modalen Dialog?! "CDialog::InitModalIndirect Call this member function to initialize a modal dialog object using a dialog-box template that you construct in memory." Zitieren
Guybrush Threepwood Geschrieben 13. März 2003 Geschrieben 13. März 2003 Originally posted by Technician :confused: wie ich aus der MSDN entnehme, erstelle ich damit auch wieder einen modalen Dialog?! "CDialog::InitModalIndirect Call this member function to initialize a modal dialog object using a dialog-box template that you construct in memory." Was ist mit CDialog::Create? Laut MSDN wird damit ein nichtmodaler Dialog erstellt, nur weiß ich nicht ob er damit auch direkt dargestellt wird. Wenn nicht könntest du ihn ja mit ShowWindow() darstellen und immer wenn er in den Hintergrund gerät, wieder hervor hohlen. Gruß Guybrush Zitieren
bigpoint Geschrieben 13. März 2003 Geschrieben 13. März 2003 ups............. natürlich meine ich Create und CreateIndirect; hast Du die beide Methoden versucht ??? funktioniert es ?? Zitieren
Technician Geschrieben 13. März 2003 Autor Geschrieben 13. März 2003 Hallo, Originally posted by 007ski hast Du die beide Methoden versucht ??? funktioniert es ?? ich hab jetzt mal folgendes gemacht: SearchTreeDialog std; std.Create(IDD_SEARCHTREEDIALOG, this); std.ShowWindow(SW_SHOW); Ergebnis: ich seh das Dialogfeld ganz kurz aufflackern, dann verschwindet es wieder :confused: Woran liegt das? Gruß, Technician Zitieren
Guybrush Threepwood Geschrieben 13. März 2003 Geschrieben 13. März 2003 Was ist denn SearchTreeDialog für eine Klasse? Ist der Dialog dann irgendwo im Hintergrund oder wird er geschlossen? Zitieren
bigpoint Geschrieben 13. März 2003 Geschrieben 13. März 2003 Originally posted by Technician Hallo, ich hab jetzt mal folgendes gemacht: SearchTreeDialog std; std.Create(IDD_SEARCHTREEDIALOG, this); std.ShowWindow(SW_SHOW); Ergebnis: ich seh das Dialogfeld ganz kurz aufflackern, dann verschwindet es wieder :confused: Woran liegt das? Gruß, Technician SearchTeeeDialg *std = new SearchTeeeDialg(this); std->Create(SearchTeeeDialg::IDD); std->ShowWindow(SW_SHOW); [/PHP] Zitieren
Technician Geschrieben 13. März 2003 Autor Geschrieben 13. März 2003 Originally posted by Guybrush Threepwood Was ist denn SearchTreeDialog für eine Klasse? Es handelt sich um einen ganz normalen Dialog, mit (derzeit) noch keiner weiteren Funktionalität. Originally posted by Guybrush Threepwood Ist der Dialog dann irgendwo im Hintergrund oder wird er geschlossen? Der Dialog befindet sich nicht im Hintergrund - wird also geschlossen. Das passiert auch, wenn bei den Dialog-Eigenschaften "Systemmodal" ausgewählt ist (was ich jetzt testweise mal gemach habe) :confused: Zitieren
Guybrush Threepwood Geschrieben 13. März 2003 Geschrieben 13. März 2003 Originally posted by Technician Der Dialog befindet sich nicht im Hintergrund - wird also geschlossen. Das passiert auch, wenn bei den Dialog-Eigenschaften "Systemmodal" ausgewählt ist (was ich jetzt testweise mal gemach habe) :confused: Tritt irgendwo ein Fehler auf? Oder könnte es evtl an dem Dialog selber liegen? Sind da vielleicht irgendwelche Common Controls drin ohne das sie initialisiert wurden? Zitieren
bigpoint Geschrieben 13. März 2003 Geschrieben 13. März 2003 bei mir wie oben schon gesagt geht es so, was auch logisch ist SearchTeeeDialg *std = new SearchTeeeDialg(this); std->Create(SearchTeeeDialg::IDD); std->ShowWindow(SW_SHOW); [/PHP] Zitieren
Technician Geschrieben 13. März 2003 Autor Geschrieben 13. März 2003 ja, das funktioniert jetzt: //das hier geht SearchTreeDialog *std = new SearchTreeDialog(this); std->Create(SearchTreeDialog::IDD); std->ShowWindow(SW_SHOW); /* //und den code hatte ich zuerst drin - das hat nicht funktioniert! SearchTreeDialog std; std.Create(IDD_SEARCHTREEDIALOG, this); std.ShowWindow(SW_SHOW); */ Danke Zitieren
Guybrush Threepwood Geschrieben 13. März 2003 Geschrieben 13. März 2003 Naja, für mich ist das aber jetzt nicht so logisch warum das funktioniert und das andere nicht. Kann mir das mal einer erklären? Zitieren
bigpoint Geschrieben 13. März 2003 Geschrieben 13. März 2003 Originally posted by Guybrush Threepwood Naja, für mich ist das aber jetzt nicht so logisch warum das funktioniert und das andere nicht. Kann mir das mal einer erklären? Es funktioniert so und so, allerdings die erste Methode ist viel besser ) Warum beim Technician es nicht funktioniert hat ist das, dass er sich SearchTreeDialog bestimmt lokal deklariert hat und nicht global Zitieren
Klotzkopp Geschrieben 13. März 2003 Geschrieben 13. März 2003 Genauso ist es. Technician hat in ihrem ersten Versuch eine lokale Instanz der Dialogklasse angelegt. Die wird aber - wie jede andere Autovariable auch - zerstört, sobald ihr Gültigkeitsbereich verlassen wird. Und damit wird auch der Dialog wieder geschlossen. Dies kann man z.B. verhindern, indem man die Instanz mit new erzeugt. Zitieren
Guybrush Threepwood Geschrieben 14. März 2003 Geschrieben 14. März 2003 Originally posted by Klotzkopp Genauso ist es. Technician hat in ihrem ersten Versuch eine lokale Instanz der Dialogklasse angelegt. Die wird aber - wie jede andere Autovariable auch - zerstört, sobald ihr Gültigkeitsbereich verlassen wird. Und damit wird auch der Dialog wieder geschlossen. Dies kann man z.B. verhindern, indem man die Instanz mit new erzeugt. Es macht aber doch keinen unterschied ob ich einen Zeiger oder eine normale Variable lokal definiere. Nach dem verlassen des Güligkeitsbereichs sind doch beide ungültig.:confused: Zitieren
Technician Geschrieben 14. März 2003 Autor Geschrieben 14. März 2003 Originally posted by Guybrush Threepwood Es macht aber doch keinen unterschied ob ich einen Zeiger oder eine normale Variable lokal definiere. Nach dem verlassen des Güligkeitsbereichs sind doch beide ungültig.:confused: Das denke ich auch... Warum SearchTreeDialog std; std.DoModal(); mit einer lokalen Variable funktioniert, ist mir klar: Der Gültigkeitsbereich kann ja nicht verlassen werden, solange der Dialog noch geöffnet ist. (nach DoModal geht's erst weiter, wenn der Dialog geschlossen wurde) Nur der Unterschied, warum das mit dem Create mit einem Zeiger, aber nicht mit einer "normalen" Variablen "ordnungsgemäß" funktioniert, ist mir ganz und gar nicht klar! Grüße, Technician Zitieren
Guybrush Threepwood Geschrieben 14. März 2003 Geschrieben 14. März 2003 Originally posted by Technician Nur der Unterschied, warum das mit dem Create mit einem Zeiger, aber nicht mit einer "normalen" Variablen "ordnungsgemäß" funktioniert, ist mir ganz und gar nicht klar! Das einzige was ich mir noch denken könnte wäre das bei einer "normalen" Variable beim Verlassen des Gültigkeitsbereichs automatisch der Destruktor aufgerufen wird, woduch der Dialog beendet wurde. Den Zeiger muß man ja selber wieder mit delete freigeben, wodurch der Destruktor aufgerufen wird. Da der Zeiger aber nicht gelöscht wird, bleibt der Dialog offen, der Zeiger wird ungültig und es ist kein Bezug zu dem offenen Dialog mehr vorhanden, das würde aber bedeuten das das äußerst unsauber ist. Zitieren
Klotzkopp Geschrieben 14. März 2003 Geschrieben 14. März 2003 Originally posted by Guybrush Threepwood Da der Zeiger aber nicht gelöscht wird, bleibt der Dialog offen, der Zeiger wird ungültig und es ist kein Bezug zu dem offenen Dialog mehr vorhanden, das würde aber bedeuten das das äußerst unsauber ist. Richtig. Ich sagte ja auch nur "z.B." Normalerweise würde man den Zeiger als Member einer anderen Klasse deklarieren, so dass man später auch noch auf den Dialog zugreifen kann, und ihn, wenn man ihn nicht mehr braucht, freigeben kann. Zitieren
Guybrush Threepwood Geschrieben 14. März 2003 Geschrieben 14. März 2003 Originally posted by Klotzkopp Richtig. Ich sagte ja auch nur "z.B." Normalerweise würde man den Zeiger als Member einer anderen Klasse deklarieren, so dass man später auch noch auf den Dialog zugreifen kann, und ihn, wenn man ihn nicht mehr braucht, freigeben kann. Ok, dann ist mir alles klar. Zitieren
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.