mehrere MessageMaps für ON_MESSAGE
-
hi,
wo ist da der Fehler?
Hab ein Programm mit einem Thread, der Thread soll auf verschiedene Variablen des Dialogs zugreifen, das mach ich über SendMessage.
ich definier erst mal:#define WM_U_GETDATA1 WM_APP #define WM_U_GETDATA2 WM_APP //weiter unten.... ON_MESSAGE(WM_U_GETDATA1, OnGetData1) ON_MESSAGE(WM_U_GETDATA2, OnGetData2) //thread UINT ThreadProc(LPVOID pParam) { int iTimeout1 = SendMessage((HWND)pParam, WM_U_GETDATA1, 0, 0); int iTimeout2 = SendMessage((HWND)pParam, WM_U_GETDATA2, 0, 0); CString csParam; csParam.Format("Received %d", iTimeout1); AfxMessageBox(csParam); CString csParam2; csParam2.Format("Received %d", iTimeout2); AfxMessageBox(csParam2); return 0; } //funktionen um die werte der variablen zu liefern LRESULT CDlgDataToThreadDlg::OnGetData1(WPARAM wParam, LPARAM lParam) { m_iTimeout1=777; return m_iTimeout1; } LRESULT CDlgDataToThreadDlg::OnGetData2(WPARAM wParam, LPARAM lParam) { m_iTimeout2=9999; return m_iTimeout2; }
wenn ich das programm und dann den thread starte müsste ja zuerst ein fenster aufpoppen mit dem wert "777" und dann noch eins mit dem wert "9999".
bekomme aber 2mal "777".ich denke irgendwas stimmt mit der messagemap nicht, bei beiden sendmessages springt der mir in die OnGetData1.
sicher ein saublöder fehler aber ich sehs nicht
Danke schon mal
-
Habs nicht getestet, aber ich glaube der Fehler liegt da:
[cpp]#define WM_U_GETDATA1 WM_APP
#define WM_U_GETDATA2 WM_APP [/cpp]
Denk mal kurz nach.PS: Nimmt man da nicht eigentlich WM_USER?
-
danke schon mal für die antwort,
ich hab ehrlich keine ahnung, WM_APP hab ich von irgendeinem forum,
schreib ich so:#define WM_U_GETDATA1 WM_APP #define WM_U_GETDATA2 WM_USER
funktionierts so wie's soll,
aber wie gehts denn richtig?
es muss doch möglich sein mehrere message maps zu definieren?!?
lasst mich nicht dum sterben!
-
Na, die IDs müssen eindeutig sein.
Überleg mal: Du stehst vor einer großen Menschenmenge und rufst "Christian" (oder anderer häufiger Name) - wieviele drehen sich um?
Sowas ähnliches ist da wohl auch passiert.Mach mal:
#define WM_U_GETDATA1 WM_USER #define WM_U_GETDATA2 WM_USER + 1
PS: Das sind übrigens keine MessageMaps sondern MessageIDs.
MessageMap ist das Teil, wo die MessageIDs den MessageHandlern zugeordnet werden.
-
super, klar so gehts, spitzenerklärung,
da habs sogar ich kapiert!was bedeuetet denn die syntax genau (name, speicherbereiche....)?
#define WM_UGETDATA1 WM_USER
-
Kennst du #define nicht?
#define SYMBOLISCHER_SELBSTAUSDENKBARER_NAME Wert
Das ist wie eine Textersetzung, aber dazu und zu dem, was man damit alles tolles machen kann, guck bitte in ein C-Buch, das ist nämlich ziemlich viel.
-
danke noch mal,
ich dachte muss immer sowas sein
#define zahl 80
oder so,
mit WM_USER + 1 als wert war mir nicht ganz klar
danke noch mal
-
Der symbolische Name wird durch ALLES ersetzt, was danach in der Zeile noch folgt.
Fiese Fehlerquelle:
#define Murks 3748;
Beachte das Semikolon!
Auch Rechnereien sind Fehlerquellen, die sollte man immer Klammern - hab ich nicht gemacht, aber irgendwo wurde damit mal was konstruiert. Das war haaresträubend.