GUI-Eigenschaften in einer Datei ablegen.
-
Hallo zusammen,
ich kämpfe mich seit Tagen durch das Web um eine Lösung für mein Problem zu finden, doch leider ohne Erfolg!
Ich arbeite mit VC2005_Prof an einem SDI-Projekt mit Splitter-Windows (mit CFormView als View-Basisklasse).
Nun möchte ich in der linken View (CLeftView) Schaltflächen (Buttons) erstellen, deren Eigenschaften (Name und Position) in einer txt-Datei abgelegt sind.--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mit einer Konsolenanwendung kann ich das Dokument problemlos parsen und auf die Attributen zugriefen, indem ich zuerst eine Klasse mit den Schaltflächen-Eigenschaften erstellt habe und anschließend einen std::vector mit den Daten gefüllt habe.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Jetzt zurück zur MFC:
Wie kann ich dann diese Ideen mit der "Klasse" und dem "std::vector" in der MFC-Programmierung umsetzen?
Meine Überlegung ist, eine Klasse mit den Schaltflächen-Eigenschaften von CButton abzuleiten, aber ich weiß leider nicht, was noch alles im Konstruktor definiert werden soll ...?// CMyBtn.h class CMyBtn : public CButton { protected: CMyBtn(); string name; int nID; int Xpos; int Ypos; int breite; int höhe; protected: CWnd* eltern_f; public: virtual ~CMyBtn(); protected: afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); };Stimmt das mit dem Zeiger auf das Elternfenster?
Kann ich den std::vector der Klasse CMyBtn einfach in der CMyBtn.h defineiern?
class CMyBtnVector : public vector<CMyBtn>Für euere Hilfe wäre ich sehr dankbar.
Gruß, Xander.
-
Xander schrieb:
Stimmt das mit dem Zeiger auf das Elternfenster?
Einen Zeiger auf das Elternfenster hat CButton schon selber - den brauchst du nicht extra anzulegen. Und zum Erzeugen des Buttons solltest du besser CButton::Create() überschreiben und dort die Methode der Basisklasse aufrufen (die nötigen Parameter mußt du dir selber zusammenstellen - z.B. aus Xpos, YPos, breite und hoehe ein CRect für die Positionsangabe).
Kann ich den std::vector der Klasse CMyBtn einfach in der CMyBtn.h defineiern?
class CMyBtnVector : public vector<CMyBtn>Von STL-Klassen abzuleiten ist generell keine gute Idee. Aber du kannst in deiner Dialog-Klasse einen vector<CMyBtn> unterbringen, füllen und die Buttons am Ende in einer Schleife erzeugen (oder eleganter per for_each()).
-
Hallo und danke erstmal für die schnelle Antwort.
Wie schaut dann die Methode der "Basisklasse" aus, um Buttons zu erzeugen?
Ich kann Deine Ausgae folgender Maßen interpretieren:// CMyBtn.h class CMyBtn : public CButton { ... protected: // afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); überschreiben public: CMyBtn(string name, int nID, int Xpos, int Ypos, int breite, int höhe); ... }// CMyBtn.cpp CMyBtn::CMyBtn(string name, int nID, int Xpos, int Ypos, int breite, int höhe) { vector<CMyBtn> List; for ( vector<CMyBtn>::size_type i = 0, j = List.size( ); i < j; ++i ) { CRect rect(List[i].Xpos, List[i].Ypos, List[i].Xpos + List[i].breite, List[i].Ypos + List[i].höhe); Button.Create(List[i].name, WS_CHILD|WS_VISIBLE, rect, _LeftView, IDi++); } }beim Punkt "_LeftView", brauche ich einen Zeiger auf der linken View (CLeftView), wo die Buttons angezeigt werden soll... wie mache ich das?
Das mit dem IDi muss ich irgendwie mit einer Start_ID lösen, die sich jedes mal inkrementiert.Mir geht's momentan in ertser Linie, nur darum, die Buttons anzuzeigen.
Mit den Zeigern auf Funktionen, die beim Anklicken auf ein Button aufgerufen werden, will ich mich erst später beschäftigen.
Danke.