Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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.

#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.

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?

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.

Super geil! Das klaptt!!!

TAUSEND DANK!!!!! :e@sy

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.