Probleme mit PostMessage/SendMessage an MFC Dialog
-
Hallo,
ich hab ein Problem dabei meinem MFC Dialogfenster eine Message zu senden. Dabei erhalte ich das Fensterhandle ja als Membervariable des Dialogs (m_hWnd).
Ich möchte dem Dialogfenster eine Nachricht aus einem nebenläufigen Thread senden. Dieser Thread ist kein Member des Dialogs womit ich auch nicht auf die Funktionen des Dialogs zugreifen kann. Daher möchte ich eine Message an den Dialog senden um diesen dazu zu bringen Funktionen auszuführen.
Dazu habe ich erstmal eine Message in der Message Map des MFC Dialogs erstellt.
BEGIN_MESSAGE_MAP(Cdialog1Dlg, CDialogEx) ... ON_COMMAND(WM_UPDATEEDITS, &Cdialog1Dlg::OnEditUpdate) ... END_MESSAGE_MAP()
und die neue Message im Header definiert
#define WM_UPDATEEDITS 2001
Dann habe ich das Fensterhandle der struct für den Thread übergeben
mythdata->hWnd = this->m_hWnd;
Im Thread möchte ich dem Fenster jetzt die entsprechende Message senden mit
SendMessage(mydata->hWnd,WM_UPDATEEDITS , 0, 0);
Dann sollte, so wie ich das verstanden habe, das Command ausgeführt werden und die Funktion OnEditUpdate aufgerufen werden. In dieser habe ich zu Testzwecken erstmal nur eine MessageBox implementiert um zu sehen ob diese aufgerufen wird.
void Cdialog1Dlg::OnEditUpdate() { // Neuer Status der Kugelfall-Anlage MessageBox(_T(" Neuer Status1"), _T("Hardware"), MB_OK); }
Jedoch passiert absolut gar nichts! Sieht hier jemand den Fehler den ich mache oder hat einen anderen Lösungsansatz der mir irgendwie weiter hilft?
Vielen dank schon mal!
Mit freundlichen Grüßen
Ascanius
-
Statt ON_COMMAND ist ON_MESSAGE zu verwenden.
Der Handler sieht dann so aus:
LRESULT OnMyMessageHandler(WPARAM wParam, LPARAM lParam);
-
Gegenteil!!! :p
_________________
wow gold ,wow gold kaufen
-
Nach Stundenlanger Suche bin ich endlich auf jemandem mit dem gleichen Problem gestoßen
Leider verstehe ich nicht, wo jetzt der Fehler lag. Mag mir da nochmal jemand auf die Sprünge helfen?
-
Du hast einen ON_COMMAND Handler gebaut. Also musst Du auch WM_COMMAND mit der entsprechenden Id versenden.
Wenn Du eine Nachricht versenden willst musst Du einen ON_MESSAGE einbauen.
Zudem darfst Du nicht einfach eine Zahl wie 200 verwenden. Du musst WM_USER+n oder WM_APP+n verwenden.
-
Ah ok, super! Funktioniert.
Wenn ich auf den Button klicke, wird der Text in dem neuen Dialolg im CEdit-Feld angezeigt. Eine Sache stört mich da noch:
Der Text wird "markiert" dargestellt, also blau hinterlegt, wie kann ich das ändern?
-
Siehe Diskussion hier:
http://www.c-plusplus.net/forum/319757