2009-06-01 11 views
3

Ich schreibe einen .NET-Wrapper um eine alte MFC-basierte Bibliothek, die wir haben. Es basiert auf einer Klasse, die Benachrichtigungen mithilfe von Fensternachrichten sendet. Es hat eine Funktion, die es dem Benutzer ermöglicht, ein Handle an ein Fenster zu übergeben, und dieses Fenster empfängt die Nachrichten.Kann ich Fenstermeldungen ohne Fenster senden/empfangen?

Ich könnte nur die Benutzer meines Wrappers zur Unterklasse Control erfordern und übergeben Sie die Handle ihrer Kontrolle, um Nachrichten zu empfangen, aber das ist schrecklich. Ich möchte, dass meine Wrapper-Klasse Ereignisse hat, die ausgelöst werden, wenn die alte Bibliothek eine Nachricht sendet, und dann kann ich die Nachricht in etwas Vernünftiges entschlüsseln. Aber ich möchte nicht, dass meine Wrapper-Klasse eine Kontrolle sein muss.

Gibt es eine Möglichkeit für mich, ein 'Dummy' Fensterhandle zu erstellen und die Nachrichten an das Handle zu erhalten, ohne ein Fenster zu erstellen?

Antwort

9

Es gibt ein Konzept von MessageOnly Windows, das Ihnen helfen kann. Sie können ein internes Nur-Nachrichten-Fenster in Ihrer Wrapper-Klasse erstellen und dieses Handle an die alte Bibliothek übergeben.

0

Sie könnten versuchen, einen Thread mit einer Nachrichtenpumpe zu erstellen und Ihre Nachrichten dazu zu senden. Der Thread löst dann alle erforderlichen Ereignisse aus, die Sie in Ihrem C# -Code behandeln möchten.

-1

Sie nicht ein Fenstergriff ohne ein Fenster, da der Fenstergriff ist das Fenster so weit von Windows betroffen ist, aber Sie können ein Fenster, ohne die WS_VISIBLE-Flag gesetzt, und verwenden Sie es für die Nachrichten erstellen können Relaying nur. Ich benutze diese Technik manchmal, um Cross-Thread-Kommunikation in MFC-only-Anwendungen zu tun (erzähl es niemandem;)). Sie können eine (C++) Klasse von CWnd ableiten, die Nachrichten verarbeiten und Funktionen aufrufen oder Signale für jede empfangene Nachricht ausgeben. Ich denke, das würde es mit Ihrem C# -Code funktionieren lassen, obwohl ich keine Erfahrung damit habe.