Mehrere Dialogoberflächen



  • Hi!

    Ich habe folgendes Problem: Ich möchte in meinem Programm mehrere verschiedene Dialogoberflächen haben. Man soll in der ersten Oberfläche auswählen können zu welcher anderen man gelangt. Wie kann ich das am besten umsetzen? Ich habe schon mal überlegt für jede Oberfläche ein eigenes DIalogfenster zu erzeugen, aber das wird dann zu umständlich wenn ich variablen übergeben muss...

    Danke

    MFG

    Hansi



  • Im Prinzip erstellst du deine Dialogresourcen, erstellst dazu eine Klasse und rufst diese in den Buttons auf dem ersten Dialog auf.
    http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap05.htm



  • Danke!Ja, gut im Notfall würd ich es so machen... Aber ist es nicht möglich verschiedene Dialogoberflächen zu erstellen un diese dann im Hauptfenster anzeigen zu lassen?

    MFG

    Hansi



  • Willst de deinen Hauptdialog in Mehrere Unterdialoge Splitten, oder was? Dann nimm nen CSplitterWnd 😉



  • Nee... Also wenn ich das richtig verstehe, kann man damit doch wahrscheinlich verschiedene Dialogoberflächen nebeneinander anzeigen oder? Ich will die Oberflächen aber nacheinander anzeigen. Vll. ne idee wie ich das umsetzen kann?

    Danke

    MFG

    Hansi



  • Pack die zu übergebenden Variablen in die App-Klasse, an die kommst du von überall mit AfxGetApp dran. 🙂
    Dann kannst du normale Dialoge oder auch Wizards nehmen, ganz wie du es brauchst.



  • Danke erstma! Habt jetzt nur mal ne frage wie kriege ich das denn hin, dass dann alle auf der Hauptoberfläche angezeigt werden?

    danke

    MFG

    Hansi



  • Hansi schrieb:

    Habt jetzt nur mal ne frage wie kriege ich das denn hin, dass dann alle auf der Hauptoberfläche angezeigt werden?

    Kannst du die Frage genauer stellen? 😕

    Was ist die Hauptoberfläche?
    Was hast du schon versucht?
    Wieso hat es nicht geklappt?
    🙂



  • Also... Wenn ich einfach im App-Wizzard der MFC ein neues SDI Projekt erstelle, dann hab ich ja da einen Dialog, der im Hauptfenster angezeigt wird. Da will ich dann z.B. 5 Buttons draufmachen. Wenn jetz ein Button gedrückt wird, sollen auf diesem Dialog, andere Steuerelemente angezeigt werden wie z.B. Listenfelder oder sonstiges. Ich will dafür keinen neuen Dialog und auch kein neues Fenster öffnen.

    Is das verständlich? Wenn nich erklär ichs gern noch genauer... Weil das is mir echt wichtig.

    Danke

    MFG

    Hansi



  • Ahhh, ich glaube, ich habs. 🙂

    Also, die Hauptoberfläche ist ein CFormView.
    Dem kannst du selbst definierte Nachrichten schicken, auf die du dann reagieren kannst.
    Ich kopier dir mal was aus meinem Code:
    Irgendwo in einen Header, den alle Klassen kennen, die die Nachricht nutzen:

    #define WM_UPDATE_TEXTE (WM_USER+1)
    

    In MainFrm.h

    protected:
    	afx_msg LRESULT OnUpdateTexte(WPARAM wParam, LPARAM pParam);
    

    In MainFrm.cpp

    // [...]
    	//}}AFX_MSG_MAP        <-- Die Zeile ist schon da!
    	ON_MESSAGE(WM_UPDATE_TEXTE, OnUpdateTexte)
    // [...]
    LRESULT CMainFrame::OnUpdateTexte(WPARAM wParam, LPARAM pParam)
    {
    	CDeinView* pView = dynamic_cast<CDeinView*>(GetActiveView());
    	if (pView)
    	{
    		pView->TuWas();
    	}
    }
    

    Und dann kannst du von überall her so die Nachricht schicken:

    AfxGetMainWnd()->SendMessage(WM_UPDATE_TEXTE);
    

    Soo, du kannst die Nachricht und die Funktionen natürlich nennen, wie du willst.
    Aber damit sollte es klappen.
    Im View machst du dir dann eine Funktion TuWas (oder auch sinnvoller benannt), wo du dann das anzeigen lässt, was du willst.
    🙂



  • Es gibt 3 Möglichkeiten.

    1.: In der FORMVIEW erstelle Buttons und hinter jedem rufst du eine anderen Dialog auf

    2.: Du verwendest einen Wizard

    3.: Du verwendes in der FormView einen TAB wo du dann alle Dialoge reinmachst.



  • Danke für die Hilfe!
    @estartu: Mit welchem Befehl erzeuge ich denn auf einem Dialog Steuerelemente(z.B. Buttons)?
    @Unix-Tom: Ist es vll. möglich bei einem Wizzard auch Rückwärts zu springen, weil es kann ja sein, dass jemand aus dem Untermenü wieder ins Hauptmenü kommen will.

    Danke

    MFG

    Hansi



  • Erzeugen geht mit Create. Schau mal mit der Suche, ich muss das auch erst nachschlagen.

    Oder du blendest die nur ein und aus, mit

    GetDlgItem(IDC_DASCONTROL)->ShowWindow(SW_SHOW);
    

    bzw.

    GetDlgItem(IDC_DASCONTROL)->ShowWindow(SW_HIDE);
    

Anmelden zum Antworten