wxWidgets: Event bei Änderung einer bool-Variable
-
Hallo,
ich habe ein Programm das im Hintergrund arbeitet. Der Status soll über ein wxTaskBarIcon angezeigt werden (z.B. Verbunden mit xxx / Nicht verbunden).
Diesen Status speichere ich in einer globalen Variable.Ist es möglich, dass bei Änderungen an dieser Variable ein Event ausgelöst wird, sodass dann eine Methode aufgerufen wird, die mir das Icon/Text von meinem TaskBarIcon ändert?
In einem Beispiel wird das nur mit einer eigenen Klasse gemacht.
Gruß
-
Nein, globale Variablen sind dafür denkbar ungeeignet.
Du könntest dir dafür eine entsprechende Klasse basteln, und z.b. einfach das Observer Pattern darin integrieren.
Damit würde dann deine Taskbarklasse jeweils bei Änderungen benachrichtigt werden.//pseudocode class boolobserver { bool value; std::vector<Observers*> vec; public: //SGetter für value, plus ein add und remove für die vector elemente void Setvalue(bool b) { value = b; Notify(); } void Notify() { for(int i = 0, s = vec.size(); i < s; i++) vec[i]->Notify(value); } };
phlox
-
Hi,
schade dass das nicht so einfach geht, dann muss ich das bestehende Programm doch nochmal anpassen.Muss ich für die in deinem Beispiel angegebene Observer-Klasse die Funktionen die du in deinem wxWidgets-Tutorial (2.3 Ein eigener Notifyevent) angegeben hast umsetzen? Oder gibt es dann eine etwas einfachere Lösung.
-
Müsste doch so ganz einfach funktionieren:
statt direkt auf die boolsche Variable zuzugreifen legst du eine Set()-Funktion anvoid SetStatus(bool bStatus) { g_status = bStatus; //hier wird die globale Variable gesetzt AktualisiereIcon(); //hier änderst du das wxTaskBarIcon }
und statt g_status=true/false schreibst du SetStatus(true/false).
-
Softwaremaker schrieb:
Müsste doch so ganz einfach funktionieren:
statt direkt auf die boolsche Variable zuzugreifen legst du eine Set()-Funktion anManchmal sieht man das einfachste nicht. Ich habe mir das wx Taskbar-Beispiel angesehen. In dem werden z.B. die Haken in den Pop-Up Menü eines Taskbar-Icons über Events gesetzt, wenn auf das Icon geklickt wird. Aber das geht bei dem Icon an sich gar nicht.
Das Prinzip war sicher auch mit der Klasse für das Observer-Pattern gemeint - ich hatte es nur falsch verstanden.
Danke für eure Hilfe!