Zwichen Dialogen hin und her
-
Hallo erstmal.
Ich bin sehr neu auf diesem gebiet, darum machen mir schon einfache Probleme zu schaffen.Hier meine erste Frage.
Ich habe mehrere Dialoge erstellt, und öffne nun aus dem Hauptfenster einen neuen Dialog (mit neu.DoModal;). wie kann ich es jetzt erreichen, das ich zwischen beiden hin und her schalten kann? Nur das neue Fenster ist und bleibt Aktiv.Zweite Frage.
Wenn ich das zweite fenster öffne, kann ich doch sicher das andere schließen, oder? Wie
Die Antworten sind sicher recht simpel, aber jeder fängt mal klein an.
P.S. Nutze Visual Studio 6.0
-
Versuchs mal mit CreateWindow und lies mal in der MSDN nach was DoModal macht
-
Da steht, daß ich Pointer auf eine Klasse als Parameter angeben soll. Aber das klappt immernoch nicht.
Ich glaub ich stell mich echt zu blöd an.
Könnte mir nicht jemand ne genauerer erklärung geben?
Wie geht das mit dem Pointer?------------
Programmieren kann ich ja hin, aber Objektorientiert ist glaub ich noch nicht so mein ding

-
Hi,
ganz einfach:
Angenommen deine DialogKlasse heißt CTestDlg:(in InitInstance)
CTestDlg* pDlg = new CTestDlg; pDlg->Create(IDD_TEST_DIALOG, NULL); pDlg->ShowWindow(SW_NORMAL); this->m_pMainWnd = pDlg; return TRUE;Grüße Rapha
-
this->m_pMainWnd = pDlg;
Warum ? Und wieso im InitInstance ?
-
Danke @ Rapha.
Ich Probier es gleich aus.@ Knuddlbaer
Ich hoffe dein Beitrag hat nichts zu sagen, und ich bekomme es hin.
Kannst ja deine Version mal Posten!Ich wünsche ein schönes Wochenende.
Bye
-
In InitInstance geht das Fenster einmal auf wenn die Instance (von was auch immer) gestartet wird.
this->m_pMainWnd;
Verändert den Zeiger von (was auch immer). Das kann so nicht gewollt sein ? Es sollte doch nur ein weiteres Fenster aufgemacht werden und nicht irgendwas ersetzt oder so.
CTestDlg* pDlg = new CTestDlg; pDlg->Create(IDD_TEST_DIALOG, NULL); pDlg->ShowWindow(SW_NORMAL);Scheint mir ok zu sein. (Findest Du aber auch in der MSDN)
-
Hi
Verändert den Zeiger von (was auch immer).
Hab ich net so ganz verstanden

Es stimmt aber, du kannst auf diese Weise nur 1 Hauptfenster erzeugen.
Ich habe deine Frage auf Grund Zeitdruck nur kurz überflogen.Anmerkung:
Findest Du aber auch in der MSDN
Der Code ist aus meinem eigenen Projekt (Den Dialognamen hab ich natürlich in Test umbenannt).
Grüße Rapha
-
Rapha schrieb:
Hi
Verändert den Zeiger von (was auch immer).
Hab ich net so ganz verstanden

Was ist den this in Deinem Beispiel und warum setzt Du das Handle auf den Dialog ?
-
Achso :p
this hab ich geschrieben, damit sich die Liste mit allen Klassenelementen öffnet

m_pMainWnd ist ein Element von CWinApp und zeigt auf das Hauptfenster.Grüße Rapha
-
Hm, und das sollten wie hellsehen ? :-p
Übrigens ist es keine gute Idee einen Hilfsdialog als Hauptfenster einzutragen ?!
Ich habe mehrere Dialoge erstellt, und öffne nun aus dem Hauptfenster einen neuen Dialog (mit neu.DoModal;). wie kann ich es jetzt erreichen, das ich zwischen beiden hin und her schalten kann? Nur das neue Fenster ist und bleibt Aktiv.
Auf die Frage wäre Übrigens die Antwort falsch gewesen, da Du ein neues Fenster erstellst und es als Hauptfenster einträgst. Aber nu is die Goldwage voll und es passt nix mehr drauf ;o)
-
Hi
Knuddlbaer schrieb:
Auf die Frage wäre Übrigens die Antwort falsch gewesen, da Du ein neues Fenster erstellst und es als Hauptfenster einträgst.
wie gesagt:
Ich habe deine Frage (von haedfinger) auf Grund Zeitdruck nur kurz überflogen.

Grüße Rapha
-
Jepp kenn ich. Dabei kommen die tollsten Antworten raus O

Hätte ja aber auch sein können das es einen besonderen Grund hat. Mit MFC mach ich nich so viel.
-
Nicht schlecht @ Knuddlbaer
Es sollte tastsählich auch nur ein Hilfsdialog sein.
Ich find es toll, daß du die Frage so aufmerksam gelesen hast, obwohl sie doch so simpel war. Danke.Im übrigen: Arbeite gerade mit dem Laptop, und hab da aus Platzgründen die MSDN nicht drauf. mach ich jetzt aber gleich

Bye UND DANKE NOCHMAL
-
Nicht schlecht @ Knuddlbaer
Es sollte tastsählich auch nur ein Hilfsdialog sein.
Ich find es toll, daß du die Frage so aufmerksam gelesen hast, obwohl sie doch so simpel war. Danke.Im übrigen: Arbeite gerade mit dem Laptop, und hab da aus Platzgründen die MSDN nicht drauf. mach ich jetzt aber gleich

Bye UND DANKE NOCHMAL
-
Hm, war eigentlich eher aus eigener Interesse hinterfragt da ich mich MFC etc. nich viel mache. Es hat mich einfach Interessiert wieso es genau so gemacht wird da ich es mir nicht sinnvoll erklären konnte. Hätte ja sein können das ich was verschlafen habe und was neuen zum lernen gibt

Klappts mit den Fensterln nu ?
-
Ja! Dashab ich endlich geschafft.
Die geschichte mit den Zeigern verwirrt mich nur immer ein wenig.Jetzt ist nurnoch mein Problem, wie ich es schaffe dieses Fenster nur einmal zu öffnen. Ich kann es ja jetzt beliebig oft öffnen.
Mal sehen, vieleicht bekomm ich es ja hin, aber falls mir hier jemand dazu etwas schreiben will, bin ich auch nicht böse

BYE
-
Hi,
haedfinger schrieb:
Jetzt ist nurnoch mein Problem, wie ich es schaffe dieses Fenster nur einmal zu öffnen. Ich kann es ja jetzt beliebig oft öffnen.
Nach deiner Problembeschreibung gehe ich davon aus, dass du ungefähr!! so eine Funktion bei einem Klick auf den Button aufrufst:
void CDeinDialogDlg::OnButtonName() { CHilfeDialog* pDlg = new CHilfeDialog(); pDlg->Create(IDD_HILFE_DIALOG, this); }Du hast mehrere Möglichkeiten:
- eine bool Variable anlegen, die bestimmt, ob der Hilfdialog schon erstellt wurde [nicht so gut]- eine Membervariable (in meinem Beispiel m_HilfeDlg) vom Typ CHilfeDlg (Name in deine Namen ändern) in deiner Dialogklasse anlegen und die Funktion, die aufgerufen wird, wenn du auf den Button klickst, ändern:
void CDeinDialogDlg::OnButtonName() { // Existiert das Hilfefenster schon? Wenn nicht: erstellen if(!m_HilfeDlg.GetSafeHwnd()) pDlg.Create(IDD_HILFE_DIALOG, this); }[nach meiner Meinung beste Möglichkeit, da du leicht zugriff auf das Hilfsfenster hast]
- FindWindow usw. aufrufen um zu entscheiden, ob das Fenster schon erstellt wurde
Grüße Rapha
-
Bei mir sieht das jetzt so aus.
Aber es klappt nicht. Es werden nochimmer mehrere geöffnet.
Ich benutze den Pfeilzeiger, weil der andere mir einen fehler bringt.void CStation::OnTest()
{
CTest* testDlg = new CTest;
if(!m_testDlg.GetSafeHwnd()) testDlg->Create(IDD_TEST_DIALOG, this);
testDlg->ShowWindow(SW_NORMAL);
}Die Variable ist direkt unter dem "public:" CTest m_testDlg;
-
Jjojo, jetzt haste beide Lösungen vermischt

Du hast die Variable m_testDlg vom typ CTest in CStation angelegt? Ok, ändere deine Funktion OnTest folgendermaßen um:void CStation::OnTest() { if(!m_testDlg.GetSafeHwnd()) { m_testDlg.Create(IDD_TEST_DIALOG, this); m_testDlg.ShowWindow(SW_NORMAL); // <- das wirst du nicht brauchen, aber egal } }Dann klappts
Grüße Rapha