Moin,
Ich hab mit der MFC eine MDI erstellt.
In der Anwendung wird vom MDI Fenster eine Geräte Dll angesprochen die eine MessageFunktion hat. Die Funktion muss Global sein.
Nun möchte ich von dieser Globalen Funktion eine Message am besten an meine Applikation Senden.
Da dachte ich mir ich mach das mit „RegisterWindowMessage“.
Also hab ich eine Funktion geschrieben
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
Im View eine Globale Variable für
und dann noch
ON\_REGISTERED\_MESSAGE( WM\_MY\_MESSAGE, OnMyMessage )
In der Globalen Funktion die die Message Senden soll hab ich dann.
const UINT ButtonMsg=RegisterWindowMessage("WM\_MY\_MESSAGE");
LRESULT ergebniss=SendMessage(HWND\_BROADCAST,ButtonMsg,0,0);
Die ID’s sind bei Beiden gleich. Meine Message kommt aber nicht an, bzw die OnMyMessage wird nicht aufgerufen.
Was mach ich falsch, das wenn ich am Gerät den Button Drücke das die MessageFunktion die Message sendet und der Applikations View diese Empfängt.
Hallo,
Anmerkungen dazu (von MS):
hWnd
Identifies the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.
Remarks
Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.
If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, Windows switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message.
Empfehlungen von mir:
-
Wenn du den WindowHandle des Empfangsfensters feststellen kannst, solltest du das Window direkt ansprechen. Dann kannst du dir auch die Registrierung beim System sparen und einfach mit dir selbst eine wm_user-Message vereinbaren. Weil sonst niemand angesprochen wird, dürfte das auch das Debuggen erheblich vereinfachen. Natürlich wird auch die Systembelastung um Grössenordnungen reduziert, aber das kümmert heute ja kein Schwein mehr.
-
Ich würde PostMessage verwenden, weil es nicht blockiert. Dazu noch eine Anmerkung aus der Dev. Ref.:
Remarks
Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.
If you send a message in the range below WM_USER to the asynchronous message functions (PostMessage, SendNotifyMessage, and SendMessageCallback), make sure that the message parameters do not include pointers. Otherwise, the functions will return before the receiving thread has had a chance to process the message and the sender will free the memory before it is used.
Gruss Reinhard
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
Danke erstmal.
Das hatte ich alles gelesen 
Und auch gedacht das ich es ans MainFrame schicken muss. Und mich gewundert.
Aber ich hab auch nicht in der CMDIMainFrame sondern in der
CApp versucht die Nachricht anzunehmen.
Jetzt gehts 