Message aus CLI an MFC-View weiterleiten



  • Hallo!

    Folgendes Problem: Ich habe einen MFC-View und dieser enthält ein CWinFormsControl. Dieses widerum enthält ein System::Windows::Forms::UserControl, welches dann des Weiteren ein ChartControl aus einer .NET-Chartlibrary enthält. In diesem ist es mir möglich, innerhalb des CLI-Teils im Projekt, die OnRClick-Nachricht abzufangen. Ich möchte allerdings, dass diese Nachricht im MFC-View behandelt wird und quasi da ankommt oder dahin gelangt. Wie könnte man das machen?

    Für hilfreiche Tipps bin ich dankbar!



  • Du musst das Event an Dein UserControl Weiterleiten... dann kannst Du es im CWinFormsControl ganz normal registrieren und in der MFC darauf reagieren.
    Siehe auch:
    http://msdn.microsoft.com/en-us/library/389zdaby.aspx



  • Hallo Jochen,

    danke für die Antwort!
    Leider reicht mir das allein noch nicht zur Lösung. Wie kann ich die Nachricht an das UserControl weiterleiten? Die einzige Zeile, in der dieses "Erwähnung" findet, ist in der Funktion CreateManagedControl. Außerdem habe ich versucht, wie in manchen Tutorials beschrieben die Nachrichten meines ManagedControls zu behandeln. Irgendwie ist da nix angekommen. Könnte es daran liegen, dass das ChartControl auf volle Größe des ManagedControls skaliert ist und deshalb alles "wegfängt" ?



  • Du musst es zuerst mal schaffen (in C#), das Du von dem ChartControl zu dem UserControl ein Event bekommst. In Deinem UserControl selber musst Du dann auch einen Event zur Verfügung stellen. Diesen Event musst Du dann auslösen, wenn der Event vom, ChartControl kommt.

    Und auf dieser Event von Deinem UserControl kannst Du dann in Deinem "OnInitialupdate" registrieren. Somit bekommst Du den Event dann in Deine MFC Applikation.

    Für ein Beispiel mit dem Event-Handling siehe:
    http://msdn.microsoft.com/en-us/magazine/cc163605.aspx



  • Jochen Kalmbach schrieb:

    Du musst es zuerst mal schaffen (in C#), das Du von dem ChartControl zu dem UserControl ein Event bekommst.

    Richtig! Womit wir wieder bei einem Teil der Ausgangsfrage wären.
    Folgendes habe ich versucht und herausgefunden: Das UserControl bekommt die Click-Messages nicht, weil das ChartControl in voller Größe im UserControl enthalten ist und deshalb nicht "wirklich" das UserControl geklickt wird. Wenn ich das ChartControl nicht auf volle Größe in das UserControl setze, dann kommen die Nachrichten korrekt an, wenn ich in einen Bereich des UserControls klicke, wo kein ChartControl ist.

    Folgende Frage ergibt sich jetzt also abschließend: Wie sende ich die Nachrichten, die ich innerhalb des ChartControls abfange, an ihr ParentWnd, bzw. an das ChartControl?



  • Ahalex schrieb:

    Folgende Frage ergibt sich jetzt also abschließend: Wie sende ich die Nachrichten, die ich innerhalb des ChartControls abfange, an ihr ParentWnd, bzw. an das ChartControl?

    im UserControl das Event des ChartControl abfangen und im UserControl auslösen



  • mogel schrieb:

    Ahalex schrieb:

    Folgende Frage ergibt sich jetzt also abschließend: Wie sende ich die Nachrichten, die ich innerhalb des ChartControls abfange, an ihr ParentWnd, bzw. an das ChartControl?

    im UserControl das Event des ChartControl abfangen und im UserControl auslösen

    Soweit so gut. MouseClick-Event ist im UserControl "angekommen". Allerdings ist das UserControl ja noch .NET-Bereich (d.h. "Object^ sender, MouseEventArgs^ e"). Ich würde aber das Event jetzt gern an das OnRButtonDown oder OnMouseClick des MFC-Views weiterleiten.





  • Jochen Kalmbach schrieb:

    ????
    http://msdn.microsoft.com/en-us/magazine/cc163605.aspx
    ????

    Wenn der Link geholfen hätte, hätte ich nicht nochmal nachgefragt. 🙂
    Ich glaube ich habe da zu wenig über meine Architektur gesagt. Die Klasse, die das CWinFormsControl enthält, ist nicht die View-Klasse, sondern ebenfalls nochmal eine Zwischenklasse, deren Objekt der eigentliche View enthält.

    Egal, ein SendMessage hat das Problem gelöst.

    Danke!


Anmelden zum Antworten