Falsche Registrierung eigener Messages
-
Hallo zusammen!
Ich habe mit Hilfe eines Beispiels zwei eigene Nachrichten erstellt. Diese sollen dann den Hauptdialog mitteilen, wenn der laufende Thread im Hintergrund Daten erhalten hat. Die Daten sollen dann gleich mit der NAchricht in den Hauptdialog gesendet werden. Folgende Zeilen habe ich bereits geschrieben:
Header Datei:
afx_msg LRESULT OnPackData(WPARAM wParam, LPARAM lParam);
C++ Quelltext Datei:
BEGIN_MESSAGE_MAP(CKWL_PackstationDlg, CDialog) ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_REGISTERED_MESSAGE(WM_PACK_DATA, OnPackBarcode) END_MESSAGE_MAP()
Ich hatte die Registrierung der MEssage erst in dieser C++ Datei stehen, aber der Compiler wollte sie unbedingt in der C++ des Thread haben, sonst hat er nicht kompiliert.
int WM_PACK_DATA = RegisterWindowMessage(L"MY_DATA_MESSAGE");
Nun ist sie aber in der C++ völlig unbekannt. Was mach ich nun, damit ich die Nachricht aus dem Thread an den Dialog bekomme.
owner->SendMessage(WM_PACK_DATA,(WPARAM)buffer,0);
buffer ist im Übrigen eine Zeichenkette, würde das so funktionieren?
Viele Grüße und schonmal Danke für jeden Ratschlag.
Ranger
-
In einer .h-Datei bzw. der anderen .cpp-Datei einfügen:
extern int WM_PACK_DATA;
-
So einfach kann das sein!
Ich danke Dir vielmals.Sag mal, ist die Parameterübergabe einer Zeichenkette im SendMessage() Aufruf so möglich wie dargestellt? Kann der Empfängerdialog damit dann weiter arbeiten? Im Thread selbst wird die Zeichenkette nämlich kurz drauf gelöscht.
Viele Grüße
Ranger
-
Der übergebene Zeiger bleibt bei SendMessage mindestens so lange gültig, bis die Nachricht abgearbeitet wurde. Wenn der Puffer länger benötigt wird, dann musst Du im Nachrichtenhandler eine Kopie davon anlegen.
-
Das bedeutet aber im Umkehrschluß nicht, dass der Thread solange angehalten wird, bis die NAchricht abgearbeitet wurde, oder?
Grüße Ranger
-
Bei Sendmessage wird der Thread angehalten, bis die Nachricht verarbeitet wurde, bei Postmessage hingegen nicht.