SDI, MDI oder was soll ich nehmen?



  • Hi,

    hab hier ein kleines Prob. Hab mir ein SDI-Projekt erstellt. Ich möchte aber im Endeffekt nur ein Programm mit Menüleiste und vielleicht Statusleiste haben, was ein paar wenige vorgegebene Dialoge (im Dialog-Editor schon erstellt) maximiert im Vater-Window darstellt (das Hauptfenster meine ich). Mit der komischen weissen MDI/SDI-Oberfläche kann ich eigentlich gar nix anfangen. Sollte ich dann lieber darauf verzichten und ohne MDI/SDI arbeiten?
    Oder wie kann ich einen Dialog im Hauptfenster nicht aufpoppen sondern maximiert darstellen lassen (eingebettet ins Hauptfenster). Es werden auch nie 2 Dialoge zur gleichen Zeit angezeigt, daher denke ich mal, bin ich bei SDI schon richtig aufgehoben, es wäre für mich auch leichter wegen Menü- und Statusleiste.
    Meine Frage ist also 1. ob in diesem Fall SDI empfehlenswert ist und 2. wie ich einen Dialog maximiert ins Hauptfenster geöffnet kriege.

    thx
    tie



  • SDI ist für deine Zwecke genau richtig.
    Du kannst auch in einer SDI mehrere Ansichten erstellen.
    MDI würdest du nehmen, wenn du mehrere Dokumente gleichzeitig offen hättest.

    Wenn du sozusagen eine große Dialogbox im Fenster darstellen willst, kannst du das bei der Projekterstellung angeben, von welcher Klasse deine Ansicht abgeleitet wird. (Standardmäßig von CView, kann aber z.B. auch CEdit für einen Texteditor oder CFormView für eine Dialogvorlage sein.)



  • Jetzt brauch ich nur noch den Code zum einbetten des Dialogs ins Hauptfenster. Also wenn ich zum Beispiel im Menü auf einein Eintrag Test drücke und dann die OnTest() ausgeführt wird, wie müsste beispielsweise der Code der OnTest() lauten? Wäre nett, wenn du mir hier weiterhelfen könntest.



  • bräuchte immernoch den Hilfe beim Einbetten der Dialoge. Hab jetzt auch eine neue Frage, die Dialoge im dialogeditior, von welchem Klasse sollen die dazu abgeleitet sein? CDialog oder CFormView?



  • Einfache Regel:

    Soll das ein eigenes Fenster sein? -> CDialog
    Soll das im Hauptfenster angezeigt werden? -> CFormView



  • Mhh mist, ich hatte gehofft, dass nur die View-Klasse von CFormView abgeleitet werden muss und nich die Dialoge auch noch. hab die jetzt alle von CDialog abgeleitet, kann ich das irgendwie ändern ohne dass ich alles neu machen muss?



  • Tja, sicher einmal alles. 🙂

    Dann hast du zwei Möglichkeiten:
    Du änderst einfach die Basisklasse per Hand, kompilierst und korrigierst die Fehler. Das werden viele sein, aber viele sind Folgefehler.

    Oder du löschst die Quelldateien der Klassen, erstellst sie mit der richtigen Basisklasse neu und kopierst dann alles rüber was brauchbar ist.



  • jup, die 2. Methode hatte ich dann auch gemacht, ging sogar relativ schnell.

    p.s. ich weiss nich opb du den post schon gesehen hast ( http://www.c-plusplus.net/forum/viewtopic.php?p=575686#575686 ) aber schick die sachen wegen der formview mal bitte an meine andere addi, brauch das dringend 🙂



  • Das ist doch schon lange raus.... 😕
    An beide!

    Ansonsten: Ich hab jetzt Mittag. So gegen 12:30 melde ich mich bei Yahoo mal an, dann können wir chatten. 🙂

    Bin da, jetzt fehlst du.
    http://messenger.yahoo.com/?i=1 und dann unten in der kleingedruckten Zeile "launch web messenger". Einen Yahoo Account hast du ja. 😃



  • hatte auch mittagspause, ich komm dann gleich mal in den chat (wenn der mit unserem proxy funzt)
    Edit: Komme durch den Proxy nich durch, weder mit dem Webmessenger noch mit Trillian



  • Schade. Hast du die Mail jetzt?

    Ansonsten kannst du ja nochmal den Link hier versuchen: http://www.busfreunde.de/chat.php?id=
    ... aber ich fürchte deine Firewall ist zu paranoid. 😞



  • und zwar hab ich in diesem abschnitt ein problem:

    switch (f_nId)
    {
    case ID_KUNDE_STAMMDATEN:
    pNextView = create_view<CKundenView, CKundenDoc>(this);
    break;
    default:
    ASSERT(0);
    return;
    break;
    }

    Die ID_KUNDE_STAMMDATEN ist denke ich mal der Dialog. CKundenView bzw CKundenDoc (heissen bei mir natürlich anders) kennt er nicht, wenn ich deren .h in der MainFrame.h mit include, klappt die Deklaration der beiden Konstruktoren nicht mehr 😕



  • Eigentlich stand das auch in der Mail: Die müssen public sein. 🙂
    ID_KUNDE_STAMMDATEN ist die ID des Menüpunktes.

    Das ganze läßt sich nämlich prima mit einer Commandrange verbinden. Daher auch die switch.



  • Da der Chat grade wieder klemmt:
    Du hast die Umstellung auf CFormView als Basisklasse nicht komplett gemacht.
    Schau bitte mal in deine andere Viewklasse, was du da alles für Funktionen hast. Und auch, welche du nicht hast.

    OnInitDialog ist im FormView fehl am Platz - das heißt OnInitialUpdate. 🙂

    Nur als Beispiel...



  • Das klappt ja jetzt wunderbar, aber nun muss ich ein CTabCtrl einsetzen, welches auf dem CFormView sitzt und auch verschiedene CFormViews einbettet. Ich habe verschiebene ausprobiert, da mir die Handhabe des Standart-CTabCtrls zu kompliziert ist und als bestes habe ich das CXTabCtrl empfunden (http://www.codeguru.com/Cpp/controls/controls/tabcontrols/article.php/c2189/)
    Nun habe ich beim Einbau aber ein Prob, es ist normalerweise dafür gedacht CDialogs in CTabCtrals einzufügen, aber nicht in CFormViews.
    Daher auch der Aufruf:
    void CONUView::OnInitialUpdate()
    {

    m_TabContent = new CTabContent;
    m_TabContent->Create(CTabContent::IDD, &m_ctrlTab /*CXTabCtrl variable*/);
    m_ctrlTab.AddTab(m_TabContent, "Tab caption", 0 /* image number*/);
    } //natürlich bei Cdialog in der OnInitDialog
    Wie muss meine Create-Funktion für CFormView aussehen?
    (Die CXTabCtrl(Membervariable m_ctrlTab) sitzt in der CONUView, welche eben von der Klasse CFormView abgeleitet ist. Darin soll die ebenfalls von CFormview abgeleitet Klasse CTabContent eingebettet werden)

    wie stell ich das halt hier über CXTabCtrl oder auch gerne eine andere (mgl. leicht zu bedienende) Klasse an, so daß ich am Ende einen Karteireiter bekomme



  • *up*
    oder gibt es da keine mgl.? dann muss ich auf den tab verzichten und das anders lösen



  • Okay, für diese Antowrt wirst du mich hauen, aber du sollst es trotzdem wissen:

    Ja, man kann CFormViews und auch CViews mit Tabs anzeigen. Ich habe an einem Projekt mitgearbeitet, wo das gemacht wurde. Der Code ist aber erstens Firmeneigentum und zweitens habe ich mir die Stellen eh nie angeschaut. War ja nicht meins. 🙄
    Hättest du das nicht vorher sagen können? Das ist der Grund, warum man in der Schule lernt, eine ordentliche Planung zu machen. Du wirst die Klassen, die du in den Tabs darstellen willst wohl wieder umbauen müssen, wenn du nichts anderes findest. Davon habe ich keine Ahnung.

    Damit sowas nicht wieder passiert: Stell die Frage komplett. Dir klaut hier keiner Ideen, also schreibe, was du vorhast. Es kann - wie du gemerkt hast - sehr gut sein, dass eine Teilfrage anders beantwortet wird als eine Gesamtfrage.

    Sorry...



  • hätte ich gewusst, das das so ein problem wird, hätte ich auch die frage anders gestellt 😉
    naja ich werd das dann nich über tabs sondern irgendwie anders lösen, was leicht zu implementieren ist 🤡



  • Wie wärs mit einer Buttonzeile ganz oben? Mit etwas Geschick kannst du das wie Tabs aussehen lassen. 😃



  • Hab es nach einer netten Anleitung hingekriegt:

    http://www.codeguru.com/Cpp/controls/propertysheet/article.php/c591/


Log in to reply