Statusleiste in der Dialoganwendung



  • Weiß es etwa keiner?!!!
    Das glaube ich nicht 😡 😞 😕



  • Naja ich bekomms auch net hin. Ein Kompromiss wäre SDI mit CFormView..



  • Also stehe ich doch nicht allein 😞

    [ Dieser Beitrag wurde am 09.01.2003 um 08:27 Uhr von Laie editiert. ]



  • Hallo, ich habe bei CodeGuru folgendes gefunden und bei mir eingebaut. Dabei habe ich zwei Felder in der Statusbar mit den ID's: ID_:ID_SEPARATOR und ID_INDICATOR_SAVE.
    Das .h file hat folgende Einträge:

    protected:
        UINT        m_lpaIDStatusBar[2];
        int         m_cIDStatusBar;
        CStatusBar  m_statusBar;
    

    In der routine: OnInitDialog() steht folgender Code:

    // Statusbar -----------------------------------------------------------
        // Create status bar at the bottom of the dialog window
        m_lpaIDStatusBar[0]  = ID_SEPARATOR;
        m_lpaIDStatusBar[1]  = ID_INDICATOR_SAVE;
        m_cIDStatusBar = 2;
        if (m_statusBar.Create(this))
        {
            m_statusBar.SetIndicators(m_lpaIDStatusBar, m_cIDStatusBar);
            ClearStatusZeile(m_statusBar);
    
            // Make a sunken or recessed border around the first pane
            m_statusBar.SetPaneInfo(0, m_statusBar.GetItemID(0), SBPS_STRETCH, NULL );
            m_statusBar.SetPaneInfo(1, m_statusBar.GetItemID(1), SBPS_STRETCH, NULL );
        }
        // We need to resize the dialog to make room for control bars.
        // First, figure out how big the control bars are.
        CRect rcClientStart;
        CRect rcClientNow;
        GetClientRect(rcClientStart);
        RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,
                       0, reposQuery, rcClientNow);
    
        // Now move all the controls so they are in the same relative
        // position within the remaining client area as they would be
        // with no control bars.
        CPoint ptOffset(rcClientNow.left - rcClientStart.left,
                        rcClientNow.top - rcClientStart.top);
    
        CRect  rcChild;
        CWnd* pwndChild = GetWindow(GW_CHILD);
        while (pwndChild)
        {
            pwndChild->GetWindowRect(rcChild);
            ScreenToClient(rcChild);
            rcChild.OffsetRect(ptOffset);
            pwndChild->MoveWindow(rcChild, FALSE);
            pwndChild = pwndChild->GetNextWindow();
        }
    
        // Adjust the dialog window dimensions
        CRect rcWindow;
        GetWindowRect(rcWindow);
        rcWindow.right += rcClientStart.Width() - rcClientNow.Width();
        rcWindow.bottom += rcClientStart.Height() - rcClientNow.Height();
        MoveWindow(rcWindow, FALSE);
    
        // And position the Statusbar
        RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
    

    Einträge werden dann mit der funktion: SetPaneText( ... ) vorgenommen. 😮



  • Danke für die Antwort!
    Probiere ich gleich aus.



  • Danke nochmals!
    Funktioniert!

    [ Dieser Beitrag wurde am 09.01.2003 um 12:02 Uhr von Laie editiert. ]



  • Tut mir leid das ich einen alten Thread wieder aufwühle, aber es gibt da ein paar sachen die ich nicht verstehe. Und zwar zu den Quellcode von Reiner

    Was ist die Funktion ClearStatusZeile?
    und ID_INDICATOR_SAVE

    bei mir kommt undeclared identifier "ID_INDICATOR_SAVE"
    Danke schon mal im Vorraus



  • bin ein Nachttroll und stinke aus meinem Mund



  • lol 🙂



  • Hallo,
    der ID_INDICATOR_SAVE ist einfach eine ID aus der Zeichenfolgentabelle, die auch anders genannt werden kann. Sie sollte aber in der Zeichenfolgentabelle definiert werden. Die Statuszeile besteht ja aus zwei Feldern.
    Die Funktion ClearStatusZeile(..) löscht allen Text in der Statuszeile:

    m_statusBar.SetPaneText( 0, "", TRUE ); //Feld 1
      m_statusBar.SetPaneText( 1, "", TRUE ); //Feld 2
      m_statusBar.RedrawWindow();
    

Anmelden zum Antworten