How to create a process bar on the status bar in Visual C++ (142202)



The information in this article applies to:

  • The Microsoft Foundation Classes (MFC), when used with:
    • Microsoft Visual C++, 32-bit Editions 4.0
    • Microsoft Visual C++, 32-bit Enterprise Edition 5.0
    • Microsoft Visual C++, 32-bit Enterprise Edition 6.0
    • Microsoft Visual C++, 32-bit Professional Edition 5.0
    • Microsoft Visual C++, 32-bit Professional Edition 6.0
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET (2002)
    • Microsoft Visual C++ .NET (2003)
    • Microsoft Visual Studio .NET (2003), Enterprise Developer Edition

This article was previously published under Q142202
Note Microsoft Visual C++ .NET 2002 and Microsoft Visual C++ .NET 2003 support both the managed code model that is provided by the Microsoft .NET Framework and the unmanaged native Microsoft Windows code model. The information in this article applies only to unmanaged Visual C++ code.

SUMMARY

There are times when you may want to show the progress of a process on the status bar. Developer Studio does this when loading a project. You can implement this by using CStatusBar and CProgressCtrl.

MORE INFORMATION

A default AppWizard-generated MFC application has a class (CMainFrame) that contains a member variable m_wndStatusBar of type CStatusBar. The following sample code uses this member variable as the parent of a CProgressCtrl, which will be positioned over the first pane of m_wndStatusBar. First, the CProgressCtrl is created. Then, the sample code simulates a lengthy process using the Sleep function in a for loop.

Sample code

   /* Compile options needed: default
   */ 

   // This is a menu option handler that takes a long period of time
   void CMainFrame::OnLengthyProcess()
   {
       // Create the CProgressCtrl as a child of the status bar positioned
       // over the first pane.

       RECT rc;
       m_wndStatusBar.GetItemRect (0, &rc);
       CProgressCtrl wndProgress;
       VERIFY (wndProgress.Create(WS_CHILD | WS_VISIBLE, rc,
                                               &m_wndStatusBar, 1));
       wndProgress.SetRange(0, 50);
       wndProgress.SetStep(1);

       // Perform some lengthy process, simulated here with a for loop
       // and the Sleep function.

       for(int i=0;i<50;i++)
       {
          Sleep(50);
          wndProgress.StepIt();
       }
   }
				

Modification Type:MajorLast Reviewed:9/29/2005
Keywords:kbinfo kbhowto kbMFCCtrlBar kbStatBar KbUIDesign KB142202 kbAudDeveloper