Showing progress bar in a status bar pane | CodeGuru

Showing progress bar in a status bar pane

This code creates a progress bar anywhere in the status window and the control is created only once. 1. From the View menu, choose Resource Symbols. Press the New button and assign the symbol a name. (In this example well be using ID_INDICATOR_PROGRESS_PANE) Its probably best if you let the computer assign a value for […]

Written By
CodeGuru Staff
CodeGuru Staff
Oct 1, 2002
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

This code creates a progress bar anywhere in the status window and
the control is created only once.

1. From the View menu, choose Resource Symbols. Press the New button
and assign the symbol a name. (In this example well be using
ID_INDICATOR_PROGRESS_PANE) Its probably best if you let the computer
assign a value for it.

2. In MainFrm.cpp, find the indicators array (located under the message
map section) and type the ID of the resource (ID_INDICATOR_PROGRESS_PANE)
in the section. Put it under all the rest of the IDs, unless you dont
want the bar in the far right corner. (placing the ID at the beginning of
the array puts the pane in the far left where the program messages
usually go)

3. Open the string table in the resource editor, and from the Insert
menu, choose New String.

4. Double click the string and select the ID. For the message, just
type a bunch of spaces. (the more spaces the larger the progress bar)

Now that weve created the pane, its time to put a progress bar in it.

1. Declare a public variable in MainFrm.h of type CProgressCtrl. (In
this example well call it m_Progress)

2. Declare a protected variable in MainFrm.h of type BOOL. (In this
example well call it m_bCreated)

3. In the OnCreate() function in MainFrm.cpp, initialize m_bCreated to
FALSE:

	m_bCreated = FALSE;

4. Now, when we need to use the progress bar, we check to see if its
created, and if it isnt, we make a new one:

CMainFrame::OnSomeLongProcess()
{
	RECT MyRect;
	// substitute 4 with the zero-based index of your status bar pane. 
	// For example, if you put your pane first in the indicators array, 
	// youd put 0, second youd put 1, etc.
	m_wndStatusBar.GetItemRect(4, &MyRect);

	if (m_bCreated == FALSE)
	{
		//Create the progress control
		m_Progress.Create(WS_VISIBLE|WS_CHILD, MyRect, &wndStatusBar, 1);

		m_Progress.SetRange(0,100); //Set the range to between 0 and 100
		m_Progress.SetStep(1); // Set the step amount
		m_bCreated = TRUE;
	}

	// Now well simulate a long process:
	for (int I = 0; I < 100; I++)
	{
			Sleep(20);
			m_Progress.StepIt();
	}
}

If the window is resized while the progress bar is created, the progress
control doesnt reposition correctly, so we have to override the WM_SIZE
event of class CMainFrame:

void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
	CMDIFrameWnd::OnSize(nType, cx, cy);
	RECT rc;
	m_wndStatusBar.GetItemRect(4, &rc);

	// Reposition the progress control correctly!
	m_Progress.SetWindowPos(&wndTop, rc.left, rc.top, rc.right - rc.left,
		rc.bottom - rc.top, 0);

}

Thats the way to implement a progress control into a status bar pane!
Although the process is long, it is relatively simple.

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.