Routinen des Mainframe in einer class nutzen



  • Hallo zusammen,

    ich suche mir echt den Wolf und hoffe (und bin mir auch sicher) das ihr mir weiterhelfen könnt.

    Ich habe ein neues Projekt unter Visual C++ Express mit wxWidgets gestartet. Mein Frame startet auch tadellos, wobei ich die Configverwaltung in eine eigene Klasse gepackt habe:

    class MyFrame: public wxFrame
    {
    public:
      MyFrame();
      virtual ~MyFrame(); 
    
    private:
      ConfigDialog	CFGDialog;
    
      DECLARE_EVENT_TABLE()
    };
    
    class ConfigDialog
    {
    public:
      ConfigDialog();
      ~ConfigDialog();
    
      int  main_w, main_h;
    };
    

    Funktioniert auch prächtig, aber: ich möchte in der Config Class die aktuelle Fenster Position und Größe speichern. Das Abrufen der Information mit:

    GetClientSize(&main_w, &main_h);
    

    funktioniert einfach nicht da ich auf den Befehl keinen Zugriff habe. Wahrscheinlich ist es nur ein einziger Befehl, aber ich sehe den Wald vor lauter Bäumen nicht.

    Danke, Sven



  • Mach doch einfach in der COnfig Klasse nen Setter und teil der ConfigKlasse bei Änderung der Größe die neue Größe mit...

    void ConfigDialog::setSize(const wxSize& size)
    {
       main_w = size.GetX();
       main_h = size.GetY();
    }
    
    DECLARE_EVENT_TABLE(MyFrame, wxFrame)
       EVT_SIZE(MyFrame::OnSizeChange)
    END_EVENT_TABLE()
    
    void MyFrame::OnSizeChange(wxSizeEvent& e)
    {
       CFGConfig.setSize(e.GetSize());
    
       e.Skip() // <-- wichtig
    }
    

    Hab das kurz ausm Kopf getippt, sollte aber so passen von den Events her.



  • Im Grunde hast du Recht, aber ich hab noch ein paar Parameter mehr die ich laden möchte. Kann man der Klasse nicht irgendwie den Zeiger übergeben?



  • Kwietscheente schrieb:

    Im Grunde hast du Recht, aber ich hab noch ein paar Parameter mehr die ich laden möchte. Kann man der Klasse nicht irgendwie den Zeiger übergeben?

    Natürlich kann man das, wo is das Problem?

    void ConfigDialog::setParent(MyFrame* parent)
    {
       m_MyParent = parent;
    }
    
    class ConfigDialog
    {
    public:
       void setParent(MyFrame*);
    
    private:
      MyFrame* m_MyParent;
    }
    
    MyFrame::MyFrame(/* ... *gekürzt */)
    {
       CDFDialog.setParent(this);
    }
    

Anmelden zum Antworten