Wie kann man bei wxWidgets das zuvor aktive Fenster ermitteln?



  • Hallo,
    ich versuche aus einem gerade aktiven Fenster, das zuvor aktive Fenster(bzw. das Fenster was davor im Vordergrund war) zu ermitteln... gibt es das eine Methode für?
    Gruss
    Brutkohl2



  • Gehört das Fenster zu deinem Programm?



  • ja genau, das abe ich vorher aufgerufen.



  • Dann mach doch einfach eine globale last_activated-Variable, die bei jedem Deactivate-Event eines Fensters neu gesetzt wird.



  • Danke, schonmal für sie Idee. ich hätte jetzt jeden Window was ich erstelle einen Pointer auf die Variable mitgegeben, oder wie kann man sonst globale Variabl anlegen?



  • Eine globale Variable ist natürlich oft schlechter Stil, aber in deinem Fall wäre es vermutlich angebracht. Was eine globale Variable ist, solltest du wissen, ansonsten fang noch mal mit den Grundlagen an.



  • Ich würde diese Daten der Applikationsklasse übergeben, da diese mit Hilfe von wxGetApp() überall zugänglich ist:

    class Application : public wxApp
    {
    public:
      wxWindow* getLastWindow() const { return m_lastWindow; }
      void setLastWindow(wxWindow* win) { m_lastWindow = win; }
    private:
      wxWindow* m_lastWindow; 
    };
    
    // Als Beispiel die Klasse Mainframe:
    #include "Application.hpp
    DECLARE_APP(Application)
    
    BEGIN_EVENT_TABLE(Mainframe, wxFrame)
    EVT_KILL_FOCUS(Mainframe::OnLostFocus)
    END_EVENT_TABLE()
    
    class Mainframe : public wxFrame
    {
    protected:
       virtual OnLostFocus(wxFocusEvent& e)
       {
           wxGetApp()->setLastWindow(this);
       }
    
    private:
      DECLARE_EVENT_TABLE();
    };
    

    http://docs.wxwidgets.org/trunk/classwx_focus_event.html
    http://docs.wxwidgets.org/2.6/wx_rttimacros.html#declareapp

    Alternativ kannst du auch das EVT_SET_FOCUS abfangen. Dann enthält das event einen Zeiger auf das Fenster das vorher den Fokus hatte.
    HTH



  • Gibt es dieses Deactivate-Event überhaupt, und wenn ja, wie heißt der eventhandler richtig?
    Und mit dem EVT_SET_FOCUS würde es funktionieren, aber es wird periodisch immer wieder aufgerufen solange das fenster aktiv ist und das verschlingt damit unütze Rechenzeit..



  • Ok. habe jetzt onkillfocus event genommen und funzt super. vielen dank nochmal


Log in to reply