Zum Inhalt springen

PostMessage(), MessageMap und wie man die Nachricht abfängt...


Empfohlene Beiträge

Geschrieben

Hi,

ich habe immernoch das Problem mit meinem Thread.

Ich habe jetzt gelesen dass man das über die PostMessage() macht.

Ich sende also jetzt

pWnd->PostMessage(WM_THREAD_END, 0, 0);
in meinem Thread wenn dieser beendet wird. Definiert ist die Nachricht so:
#define WM_THREAD_END    WM_APP + 1
Dann habe ich einen Eintrag in BEGIN_MESSAGE_MAP hinzugefügt. So wie es der Klassenassistent bei WM_KEYDOWN macht.
BEGIN_MESSAGE_MAP(CScannenDlg, CDialog)

	//{{AFX_MSG_MAP(CScannenDlg)

	WM_THREAD_END()

	//}}AFX_MSG_MAP

END_MESSAGE_MAP()
In der MessageMap habe ich meine Nachricht auch bekannt gemacht. So:
#define WM_THREAD_END() \

	{ WM_THREAD_END, 0, 0, 0, AfxSig_vwww, \

		(AFX_PMSG)(AFX_PMSGW)(void (AFX_MSG_CALL CWnd::*)(void))&OnThreadEnd },

Dann habe ich noch die Funktion angelegt die Aufgerufen werden soll wenn der Thread beendet ist. So:
void CScannenDlg::OnThreadEnd() 

{

	MessageBox("TEST")	;

}

Aber ich komme nie an meiner MessageBox an.

Irgendwas muss noch falsch sein.

Könnt Ihr mir bitte helfen?

PPS:

Jetzt habe ich es so, dass WM_THREAD_END in BEGIN_MESSAGE_MAP bekannt ist,

allerdings nicht im Thread. pWnd->PostMessage(WM_THREAD_END, 0, 0);

Das mag er nicht....

Obwohl es ja in AFXMSG_.H definiert ist und auch im Dialog bekannt zu sein scheint.

Geschrieben
#define WM_THREAD_END    WM_APP + 1
...
#define WM_THREAD_END() \[/code]

Fällt dir was auf? Es ist sicher nicht gut, wenn dein Messagemap-Makro genauso geschrieben wird wie deine Nachricht.

Du brauchst auch gar kein eigenes Makro. Du kannst das mit ON_MESSAGE machen.

Geschrieben
Fällt dir was auf? Es ist sicher nicht gut, wenn dein Messagemap-Makro genauso geschrieben wird wie deine Nachricht.

Du brauchst auch gar kein eigenes Makro. Du kannst das mit ON_MESSAGE machen.

Danke für Deine Antwort Klotzkopp :)

Ja ich habe entdeckt dass es daran gelegen hat dass es bei BEGIN_MESSAGE_MAP nicht geklappt hat.

Das habe ich rausgenommen. aber dafür war das Define nicht mehr in dem Thread bekannt.

Was meinst Du das mit ON_MESSAGE? Wenn ich das Verwende muss ich es doch irgendwie meiner Funktion zuweisen, dass die Funktion aufgerufen wird wenn der Thread beendet ist. Wie mache ich das?

Geschrieben
Was meinst Du das mit ON_MESSAGE? Wenn ich das Verwende muss ich es doch irgendwie meiner Funktion zuweisen, dass die Funktion aufgerufen wird wenn der Thread beendet ist. Wie mache ich das?

Steht in der MSDN Library:

ON_MESSAGE(WM_THREAD_END, DeineMemberFunktion)

Die Funktion muss so aussehen:

afx_msg LRESULT DeineMemberFunktion( WPARAM wParam, LPARAM lParam);

Und es muss natürlich eine nichtstatische Memberfunktion der Klasse sein, zu der die Messagemap gehört.

Die Namen den Parameter sind wurscht. Da drin landen Parameter 2 und 3 von Post-/SendMessage.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...