Nachrichtenproblem
-
Hallo allerseits,
ich habe ein kleines Problem mit der Kommunikation zweier Klassen innerhalb einer Dialoganwendung:
Bisher habe ich die Ereignisverarbeitung immer mittels einer eigenen WM realisiert. Bei meinem aktuellen Projekt stosse ich damit jedoch auf Schwierigkeiten. Das Projekt besteht derzeit unter anderem aus der Dialogklasse und einer Berechnungsklasse. Die Berechnungsklasse hält einige static Funtionen für verschiedene Berechnungsalgorithmen bereit. Diese Funktionen werden periodisch von der Dialogklasse aufgerufen.Tritt innerhalb der Berechnungsalgorithmen ein bestimmtes Ereignis ein, so würde ich gerne umgehend eine Nachricht an den Dialog senden. Mit SendMessage bekomme ich es nicht hin, da ja in der Berechnungsklasse kein Fenster/Dialog bekannt ist. Zur Verdeutlichung: das Einbinden des Dialog-Headers schlägt fehl, da ja andersherum die Berechnungsklasse bereits von der Dialogklasse eingebunden wird.
Grüße
Flo
-
Hallo
Du könntest deiner Berechnungklasse eine Callback-Funktion hinzufügen,
die erst zur Lauzeit vom Dialog eingerichtet wird:class X { void (*callback)(void* param,int data); void *callback_param; int Event(int i) { callback(callback_param,i); } }; class CMyDlg { static void even_proc(void *param, int data); void even_proc(int data); X x_class; ... } CMyDlg::OnInitDialog() { x_class.callback = even_proc; x_class.callback_param = this; ... } CMyDlg::even_proc(void *param, int data) { ((CMyDlg*)param)->even_proc(int data); } CMyDlg::even_proc(int data) { // Hier kommt die nachricht an // z.B. }