SDI und Zeiger auf MainFrame



  • Hallo,

    ich habe eine SDI Anwendung mit 2 CListCtrl Ansichten (SplitWindow).
    In meiner CMainFrame Klasse habe ich in der Statusleiste eine Prozessbar-Anzeige eingefügt. Hier der Code:

    m_wndStatusBar.SetPaneInfo(1,ID_INDICATOR_PROGRESS,SBPS_NORMAL,120);
    RECT rc;
    m_wndStatusBar.GetItemRect (1, &rc);
    m_ProgressCtrl.Create(WS_CHILD | WS_VISIBLE, rc,&m_wndStatusBar, 0);

    mit m_ProgrssCtrl.SetPos(29) setzte ich den Startwert.

    Nun möchte ich aus einem meiner Ansichten, die Prozessbar steuern.
    Dazu habe ich mir einen Zeiger geholt:

    CMainFrame* pMain;
    ASSERT_VALID(pMain);

    pMain->ProgrssCtrl.SetPos(50);

    Erstellt wird das Programm einwandfrei, nach dem Ausführen erhalte ich folgende Fehlermeldung:

    Unbehandelte Ausnahme in MFC42.Dll

    _AFXCMN_INLINE int CProgressCtrl::SetPos(int nPos)
    { ASSERT(::IsWindow(m_hWnd)); return (int) ::SendMessage(m_hWnd, PBM_SETPOS, nPos, 0L); }

    Also das Problem ist ich möchte mit den beiden CListCtrl Klassen die Prozessbar steuern.
    Kann mir jemand helfen.
    Vielen Dank im vorraus.

    Mfg WP



  • Jo... mach in der CMainFrame einen Getter für die ProgressBar...

    Dann mit

    ((CMainFrame*)AfxGetMainWnd())->GetMyProgressCtrl()->SetPos(40);
    


  • Erstmal danke für die Antwort, soviel Zeit muss sein.

    Also mit dieser Funktion erstelle ich die Prozessbar:
    ProgressBar(int Konto)
    {
    m_wndStatusBar.SetPaneInfo(1,ID_INDICATOR_PROGRESS,SBPS_NORMAL,120);
    RECT rc;
    m_wndStatusBar.GetItemRect (1, &rc);
    m_ProgressCtrl.Create(WS_CHILD | WS_VISIBLE, rc,&m_wndStatusBar, 0);

    //Fortschrittanzeige mit setzen
    m_ProgressCtrl.SetPos(70);
    )

    Wenn ich Dich richtig verstanden habe, hole ich mir mit dem Code:
    ((CMainFrame*)AfxGetMainWnd())->ProgressBar(1)->SetPos(40);
    einen Zugriff auf die CMainFrame Klasse. Ist das der "Getter", wobei ich nicht weiß was ein Getter sein soll. Mit 42 Jahren auf dem Buckel bin ich der Jungendsprache nicht mehr so aktuell. Sorry.

    Bitte um Antwort, danke.
    Mfg Wp



  • Nachdem mein Sohn gesagt hat mit Deinem Brauerreitumor solltest Du mehr Sport treiben und nicht so ein Quatsch programmieren habe ich es hinbekommen.

    Mfg
    WP



  • Getter und Setter sind sowieso out, wenn ich die C++-Trends richtig verfolge. 😃

    Nein im Ernst: In "ordentlichem" C++ kapselt man alle Attribute (im Gegensatz zur MFC, wo alles public herum liegt) und liefert dafür Get- und Set-Funktionen. Beispiel:

    class krieger
    {
      private:
        static int count_;
        string name_;
        int gesundheit_;
        int kraft_;
        int ruestung_;
        void holeAdresse() const;
      public:
        krieger();
        ~krieger();
    
        //get-Methoden inline
        string getName()    const {return name_;}
        int getGesundheit() const {return gesundheit_;}
        int getKraft()      const {return kraft_;}
        int getRuestung()   const {return ruestung_;}
    
        //set-Methoden inline
        void setName(string name)   {name_       = name;}
        void setGesundheit(int val) {gesundheit_ = val;}
        void setKraft(int val)      {kraft_      = val;}
        void setRuestung(int val)   {ruestung_   = val;}
    
        void angreifen( krieger& gegner );
    };
    

Anmelden zum Antworten