MDI Doc/View und Childframes



  • Hi @all,

    ich habe ein MDI-Projekt am Laufen, dass im Doc die RS232 abfragt und Daten holt und die in eine CList schreibt.
    Im View werden die Daten aus der List geholt, bearbeitet und in ein ListCtrl geschrieben.

    Wenn eine bestimmte Bedingung zutrifft, dann wird ein neues Childframe erstellt (über ID_FILE_NEW).
    Nur kann ich nicht die Schnittstelle 2mal öffnen, da sie ja bereits im 1. Childframe bedient wird.

    Meine Frage: Wie kann ich z.B. eine Kommunikation zw. den einzelnen Childframes einrichten oder welche Wege gibt es, dem 2.Childframe mitzuteilen, dass Daten für ihn da sind und er die bearbeiten soll ?? 😕

    Oder soll ich gleich ein neues View erstellen ? Ich weiß nicht wie ich mein Problem lösen soll.

    Fakt ist, dass ich bestimmte Daten nur im 2.Frame bearbeiten will und die im 1. nix zu suchen haben.
    Habe das MDI-Konzept noch nicht so richtig geschnallt !
    Kann Hilfe gebrauchen !

    Schonmal vielen Dank 👍



  • Die erste Frage, die sich mir stellt, ist:

    Was soll das Programm genau machen?

    Du öffnest eine Schnittstelle, und visualisierst irgendwelche Daten anschließend in einer View. Dann kommt ein Ereignis, worauf die Daten in einer anderen View visualisiert werden sollen. Wie ist es mit einem dritten, vierten, ... Ereignis? Sollen dann die Daten wieder woanders visualisiert werden, und gibt es noch Daten, die in zuvor erstellten Views dargestellt werden müssen?

    Gruß Gio



  • Das ging ja schnell. 🙂

    Also habe eine MDI-Applikation mit der ich mir Daten von der RS232 holen kann.
    Per Klick auf Start wird der Thread angeworfen, der mir die Daten von der Schnittstelle holt. Die Daten liegen in nem struct vor.

    Diese Daten werden dann in eine CList geschrieben. Das passiert soweit alles im Doc.
    Im View werden diese Daten aus der List geholt, verabeitet und dann wird das ListCtrl Zeile für Zeile mit den Daten gefüllt.

    Es wird ein neues Childframe erzeugt wenn eine in diesem struct enthaltene ID ungleich der Aktuellen ist (die habe ich mir "zwischengespeichert").
    Wenn eine "neue" ID vorhanden ist in dem struct, dann wird das neue Frame erzeugt und darin sollen dann bloß die Daten behandelt werden, die diese neue ID tragen.

    Die Daten mit der alten ID sollen nach wie vor im 1. Childframe behandelt werden.

    Es kann durchaus sein, dass wieder eine neue ID in diesem struct steht und dann sollen alle Daten mit dieser neuen ID wieder in einem neuen Frame bearbeitet und angezeigt werden.
    Der Vorgang kann beliebig oft geschehen, hauptsache ist dass in einem Childframe nur eine ID behandelt wird, um das mal einfach auszudrücken. 🙂

    Sollen dann die Daten wieder woanders visualisiert werden

    Nein, pro Childframe wird nur eine ID behandelt.

    Hätte gar nicht gedacht, dass das so komplex wird.



  • Könntest du schon im Dokument sortieren?



  • Bis zu wieviel verschiedene IDs (also im Prinzip Views) möchtest Du bedienen können?



  • @connan:
    Eine gewisse Filterung mache ich schon, wenn eben eine neue ID im struct steht, dann erstelle ich ein neues Childframe.

    @Gio:
    Für den Anfang würden 2 bis 3 erstmal reichen, wenn ich das irgendwie und irgendwann für 2 bis 3 hinkriege, dann wird das für noch mehr (vielleicht) einfacher, wenns man einmal hat.

    Allgemein gesagt:
    Ab dem 2.View (der 2.ID) soll es so sein:
    - der Thread zum Prüfen der RS232 ist nur im 1.Frame bedienbar
    - ab dem 2.Frame sollen die Daten nur angezeigt werden

    Aber der Vorschlag hat mich auf ne Idee gebracht:
    Das einzige, was ich brauche ist irgendeine Kommunikation zw. den Childframes !
    Im 1. wird er Thread gestartet, und da kriege ich mit, ob die ID ungleich der aktuellen ist, erzeuge ein neues Frame und müsste dem neuen Frame irgendwie dieses struct mit der neuen ID schicken.

    Das wäre das Hauptproblem wenn ich jetzt nix übersehe.
    Ich kann bloß ab dem 2.Frame den Thread nicht mehr starten oder verwenden, da der ja schon im 1.Frame läuft.
    Deswegen bräuchte ich diese Kommunikation.



  • Hast Du auch mal erwogen, den Thread in den Mainframe zu nehmen, der dann, je nach Ereignis, seine Childframes bedient, oder ggf. ein neues Child erzeugt?



  • Jetzt gerade hab ich daran gedacht ! 🙂

    Damit kann ich mir den ganzen Mist sparen, der Thread schickt die Daten dann an das jeweilige Childframe.

    Gut steuerbar über nen Counter, wenn der > 1 ist, dann werden die Buttons im 2.Frame disabled und an das 2.Frame die Daten geschickt...

    Ok, super werde das morgen mal so probieren und mich sicherlich wieder melden, wenn ich noch irgendwo Probleme hab.

    Vielen Dank für eure superschnelle und natürlich sehr hilfreiche Unterstützung !! 👍

    Weiter so...



  • Hi,

    muss das Thema hier nochmal ausgraben, wollten nicht wieder ein neuen Fred aufmachen.

    Also:
    Ich hab ja mein Thread im Mainframe, und der erzeugt wenn nötig dort auch neue Childframe über ::PostMessage(m_hWnd, WM_COMMAND, ID_FILE_NEW, 0);

    Ich habe jetzt ein Problem: habe keine Ahnung wie ich jetzt am besten nen Pointer auf das gerade eben erzeugte Doc/View-Paar kriege, weil ich im neu erzeugten Doc eine Variable setzen muss.
    Oder wie kann man noch ein neues Doc/View-Paar erzeugen ? Bei meinen ganzen Versuchen mit MultDocTemplate... hab ich zum aktuellen Doc immer nur ein neues View gekriegt, was ich aber nicht will.

    Komme hier nicht klar... 🙄


  • Mod

    Du hast es schon einmal in einem anderen Thread gefragt und ich habe Dir auch da die entsprechende Antwort gegeben.

    Du erzeugst ein CMultiDocTemplate. Merke Dir den Zeiger. Um ein neues Dokument mit Frame zu erzeugen (Also alles was OnFileNew macht) musst Du nur

    pTemplate->OpenDocumentFile(NULL);
    

    Aufrufen. Netterweise gibt diese Funktion Dir einen Zeiger auf das neue Dokument zurück.



  • Oh Ok, entschuldige, es gibt manchmal Tage, da erschlägt mich das alles regelrecht. 🙂

    Ich danke dir !!


Anmelden zum Antworten