[MFC] Cum scriu mesaje custom in statusbar?

Despre MFC, ATL si alte biblioteci C++ de la Microsoft (forum moderat)
Post Reply
User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

[MFC] Cum scriu mesaje custom in statusbar?

Post by Ovidiu Cucu » 03 Aug 2009, 23:40

Intrebare: Cum scriu mesaje custom in statusbar-ul frame-ului principal dintr-o aplicatie SDI/MDI?

Raspuns: In mod implicit, o aplicatie SDI/MDI are un statusbar cu patru pane-uri. In primul, framework-ul scrie informatii despre item-ul de meniu sau butonul din toolbar selectat.
In partea dreapta, sunt trei pane-uri pentru starea tastelor "Caps Lock", "Num Lock" si "Scroll Lock".
Default Statusbar.gif
Default Statusbar.gif (24.21 KiB) Viewed 2774 times
Uneori este necesar de afisat altfel de mesaje, care sa reflecte sa zicem starea unui task, a unui document etc.
Prima tendinta este sa se scrie mesaje custom in acest pane, ceea ce nu este imposibil dar poate crea confuzie pentru utilizator.
Mai indicat este sa se adauge un nou pane (sau mai multe) special pentru mesaje custom, ceva de genul:
Custom Statusbar.gif
Custom Statusbar.gif (1.87 KiB) Viewed 2774 times
O metoda simpla care utilizeaza cel mai mult facilitatile framework-ului este urmatoarea:
  • in editorul de resurse se adauga un string, de exemplu avand ID-ul ID_INDICATOR_CUSTOM; de notat ca framework-ul va dimensiaona automat pane-ul in functie de lungimea acestui string;
  • in fisierul de implementare al frame-ului principal se insereaza ID-ul acelui string intre elementele array-ului indicators:

    Code: Select all

    // MainFrm.cpp
    // ...
    static UINT indicators[] =
    {
       ID_SEPARATOR,        // status line indicator
       ID_INDICATOR_CUSTOM, // CUSTOM PANE
       ID_INDICATOR_CAPS, 
       ID_INDICATOR_NUM,
       ID_INDICATOR_SCRL,
    };
  • se mapeaza un update command UI handler pentru ID_INDICATOR_CUSTOM:

    Code: Select all

    // MainFrm.h
    // ...
    class CMainFrame : public CMDIFrameWnd
    {
       //...
       afx_msg void OnUpdateIndicatorCustom(CCmdUI* pCmdUI);
       DECLARE_MESSAGE_MAP()
    };

    Code: Select all

    // MainFrm.cpp
    // ...
       ON_UPDATE_COMMAND_UI(ID_INDICATOR_CUSTOM, OnUpdateIndicatorCustom)
    END_MESSAGE_MAP()
    // ...
    void CMainFrame::OnUpdateIndicatorCustom(CCmdUI* pCmdUI)
    {
       // Call...
       // pCmdUI->SetText(...); to set the text, or...
       // pCmdUI->Enable(...); to show/hide the text.
    }
    
<< Back to MFC index



Post Reply