KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q121946: How to Create a Status Bar in Every MDI Child Window

Article: Q121946
Product(s): Microsoft C Compiler
Version(s): 1.00 1.50 1.51 | 1.00 2.00 2.10
Operating System(s): 
Keyword(s): kbcode
Last Modified: 25-JUL-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- The Microsoft Foundation Classes (MFC), included with:
   - Microsoft Visual C++ for Windows, 16-bit edition, versions 1.0, 1.5, 1.51 
   - Microsoft Visual C++, 32-bit Editions, versions 1.0, 2.0, 2.1, 4.0 
-------------------------------------------------------------------------------

SUMMARY
=======

By using the technique described in this article, you can have a status bar in
every child window of an MDI Application.

MORE INFORMATION
================

For Visual C++ for Windows and Visual C++ 32-bit Edition version through 2.x,
use the following steps to create a status bar in every child window of an MDI
Application:

1. Create an MDI Application by using AppWizard.

2. Create a new MDI child window class. Derive it from CMDIChildWnd by using
  Class Wizard.

3. For the new class, create an OnCreate handler for the WM_CREATE message by
  using Class Wizard. You can cut and paste the following code from the
  MAINFRAME.CPP file to the OnCreate handler:

     if (!m_wndStatusBar.Create(this) ||
            !m_wndStatusBar.SetIndicators(indicators,
              sizeof(indicators)/sizeof(UINT)))
     {
        TRACE("Failed to create status bar\n");
        return -1;       // fail to create
     }

4. Cut and paste the following definition to the beginning of the newly created
  child class .CPP file:

     static UINT BASED_CODE indicators[] =
     {
          ID_SEPARATOR,                 // status line indicator
          ID_INDICATOR_CAPS,
          ID_INDICATOR_NUM,
          ID_INDICATOR_SCRL,
     };

5. Add the following public data member in the child class .H file:

     CStatusBar m_wndStatusBar;

6. Include your new child class .H file into your project .CPP file.

7. In your project .CPP file, make sure you use your newly derived child window
  class to replace CMDIChildWnd in AddDocTemplate, as in this example:

     AddDocTemplate(new CMultiDocTemplate(IDR_PROJTYPE,
                       RUNTIME_CLASS(CProjDoc),
                       RUNTIME_CLASS(CNewChild),
                       RUNTIME_CLASS(CProjView)));

  Replace PROJ with the project name you provided to AppWizard, and replace
  CNewChild with the new child class derived from CMDIChildWnd.

8. Build and run your program. You will see the status bar in every MDI child
  window.

For Visual C++ 32-bit Edition, version 4.0, the process is simpler:

1. Create an MDI Application by using AppWizard.

2. Start ClassWizard. For CChildFrame, create an OnCreate handler for the
  WM_CREATE message.

3. Edit CChildFrame::OnCreate() in CHILDFRM.CPP. Copy and paste the following
  code from the CMainFrame::OnCreate() (in MAINFRM.CPP):

        if (!m_wndStatusBar.Create(this) ||
            !m_wndStatusBar.SetIndicators(indicators,
            sizeof(indicators)/sizeof(UINT)))
        {
              TRACE0("Failed to create status bar\n");
              return -1;      // fail to create
        }

4. Copy and paste the following declaration/definition from the top of
  MAINFRM.CPP to the top of CHILDFRM.CPP, immediately after the
  END_MESSGE_MAP() macro:

        static UINT indicators[] =
        {
              ID_SEPARATOR,           // status line indicator
              ID_INDICATOR_CAPS,
              ID_INDICATOR_NUM,
              ID_INDICATOR_SCRL,
        };

5. Add the following public data member to CChildFrame in CHILDFRM.H:

     CStatusBar m_wndStatusBar;

6. Build and run your program. You will see the status bar in every MDI child
  window.

Additional query words: kbinf status mdi child window 1.00 1.50 2.00 2.10 2.50 2.51 3.00 4.00

======================================================================
Keywords          : kbcode 
Technology        : kbAudDeveloper kbMFC
Version           : 1.00 1.50 1.51 | 1.00 2.00 2.10

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.