Re: WTL Status Bar
Phil wrote:
Hello
How do I display text in the standard WTL status bar ? I know I have to
invoke SetText() in CStatusBarCtrl but I do not know how to create the
CStatusBarCtrl member variable. I do not know how to do the subclassing for
CStatusBarCtrl :-(
Add to resource.h, adjust values;
#define IDR_PROGRESS_PANE 104 //For progressbar
#define IDI_SECURITY 105
#define IDR_POPUP_PANE 106
#define IDI_DATE 107 //To display date
CMainFrame header file declarations;
CMultiPaneStatusBarCtrl m_status;
CProgressBarCtrl m_progress;
Add five icons;
IDI_SEC - IDI_NOSEC - IDI_POPUPSTOP - IDI_IE - IDI_DATE
Add this method to CMainFrame and call from CMainFrame::OnCreate.
//This method attempts to create and set up a multipane statusbar
//containning 5 parts. Simulating a simple IE style statusbar.
//Progress bar is hidden initially.
void CMainFrame::SetupWBMultiPaneStatus()
{
CreateSimpleStatusBar();
// subclass the status bar as multipane
m_status.SubclassWindow(m_hWndStatusBar);
// set status bar multi panes
int arrPanes[] = { ID_DEFAULT_PANE, IDR_POPUP_PANE, IDI_SECURITY,
IDR_PROGRESS_PANE, IDI_DATE };
int nPanes = sizeof(arrPanes) / sizeof(int);
m_status.SetPanes(arrPanes, nPanes, false);
//Load 4 icons from resource and assign them to each pane.
m_status.SetPaneIcon(IDI_SECURITY , AtlLoadIconImage(IDI_SEC ,
LR_DEFAULTCOLOR, 16, 15));
m_status.SetPaneIcon(IDR_POPUP_PANE , AtlLoadIconImage(IDI_POPUPSTOP ,
LR_DEFAULTCOLOR));
m_status.SetPaneIcon(ID_DEFAULT_PANE, AtlLoadIconImage(IDI_IE,
LR_DEFAULTCOLOR, 16, 15));
m_status.SetPaneIcon(IDI_DATE, AtlLoadIconImage(IDI_DATE,
LR_DEFAULTCOLOR));
//Load the text
CString str;
m_status.SetPaneText(ID_DEFAULT_PANE, _T("Ready")); //,
SBT_NOBORDERS);
str.LoadString(IDS_TURNOFFPOPUPS); //Load a string from resource with
the ID IDS_TURNOFFPOPUPS
m_status.SetPaneText(IDR_POPUP_PANE, str);
m_status.SetPaneText(IDI_SECURITY, _T("Internet"));
m_status.SetPaneText(IDR_PROGRESS_PANE, _T(""));
str.Empty();
SYSTEMTIME st;
::GetLocalTime(&st);
//Display the date in the date pane
//str.Format(_T("%i/%i/%i"), st.wMonth, st.wDay, st.wYear);
switch(st.wMonth)
{
case 1:
str.Format(_T("Jan %i, %i"), st.wDay, st.wYear);
break;
case 2:
str.Format(_T("Feb %i, %i"), st.wDay, st.wYear);
break;
case 3:
str.Format(_T("Mar %i, %i"), st.wDay, st.wYear);
break;
case 4:
str.Format(_T("Apr %i, %i"), st.wDay, st.wYear);
break;
case 5:
str.Format(_T("May %i, %i"), st.wDay, st.wYear);
break;
case 6:
str.Format(_T("June %i, %i"), st.wDay, st.wYear);
break;
case 7:
str.Format(_T("July %i, %i"), st.wDay, st.wYear);
break;
case 8:
str.Format(_T("Aug %i, %i"), st.wDay, st.wYear);
break;
case 9:
str.Format(_T("Sep %i, %i"), st.wDay, st.wYear);
break;
case 10:
str.Format(_T("Oct %i, %i"), st.wDay, st.wYear);
break;
case 11:
str.Format(_T("Nov %i, %i"), st.wDay, st.wYear);
break;
case 12:
str.Format(_T("Dec %i, %i"), st.wDay, st.wYear);
break;
default:
str.Format(_T("Unk %i, %i"), st.wDay, st.wYear);
}
m_status.SetPaneText(IDI_DATE, str);
m_status.SetPaneWidth(IDR_POPUP_PANE, 150);
m_status.SetPaneWidth(IDI_SECURITY, 100);
m_status.SetPaneWidth(IDR_PROGRESS_PANE, 10);
m_status.SetPaneWidth(IDI_DATE, 100);
//Add progressbar
RECT rc;
m_status.GetPaneRect(IDR_PROGRESS_PANE, &rc);
HWND hWnd = m_progress.Create(m_hWndStatusBar, rc, 0,
WS_CHILD|PBS_SMOOTH);
ATLASSERT(hWnd != 0);
m_progress.SetRange32(0, 100);
m_progress.SetPos(0);
m_progress.SetStep(1);
}
//To display text in a pane
m_status.SetPaneText(ID_DEFAULT_PANE, Text);
//To change a pane icon
//IDI_NOSEC, an icon from resource
m_status.SetPaneIcon(IDI_SECURITY ,
AtlLoadIconImage(IDI_NOSEC , LR_DEFAULTCOLOR, 16, 15));
//To hide progressbar
if(m_progress.m_hWnd)
{
m_progress.ShowWindow(SW_HIDE);
m_status.SetPaneWidth(IDR_PROGRESS_PANE, 10);
}
//To show progressbar
if(m_progress.m_hWnd)
{
m_status.SetPaneWidth(IDR_PROGRESS_PANE, 100);
RECT rc;
m_status.GetPaneRect(IDR_PROGRESS_PANE, &rc);
rc.top += 1;
rc.bottom -= 2;
rc.right -= 4;
m_progress.MoveWindow(&rc,TRUE);
m_progress.ShowWindow(SW_SHOW);
}
Peace
MH