如果我們想實現在MFC對話框中添加狀態欄顯示,如何例如分狀態欄為兩列,第一列顯示鼠標的當前位置,第二列顯示當前的時間,(如上圖)。
1. 首先,打開在資源視圖的String Table並添加兩個ID:ID_INDICATOR_NISH 和ID_INDICATOR_TIME,如下圖

2. 在該對話框的頭文件中添加一個CStatusBar類對象
CStatusBar m_bar;
3. 打開該對話框的cpp文件,並在最頂端添加以下代碼:
static UINT BASED_CODE indicators[]=
{
ID_INDICATOR_NISH,
ID_INDICATOR_TIME
};
4. 接下來創建狀態欄,在OnInitDialog()函數如下代碼:
m_bar.Create(this);//創建狀態欄
m_bar.SerIndicators(indicators, sizeof(indicators)/sizeof(UINT)); //設置狀態欄數目
CRect rect;
GetClientRect(&rect);
//設置各欄長度
m_bar.SetPaneInfo(0, ID_INDICATOR_NISH, SBPS_NORMAL, rect.Width()-100);
m_bar.SetPaneInfo(1, ID_INDICATOR_TIME, SBPS_STRETCH, 0);
//在ping屏幕上繪制狀態欄
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, ID_INDICATOR_TIME);
5. 至此,對話框上的狀態欄創建已經成功了。若是用戶喜歡,可以單獨設置狀態欄背景顏色,
可以在OnInitDialog()函數中添加代碼:
m_bar.GetStatusBarCtrl().SetBKColor(RGB(180,180,180));
當設置背景顏色無效是,請檢查編碼方式選擇的是什么,應該是和編程環境有關。比如Unicode。或者選擇使用多字節字符集
6. 添加時鍾顯示。首先在OnInitDialog()中添加
SetTimer(100,1000,NULL);
之后添加WM_TIMER的相應函數:
void CDlgStatusBarDlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent==100)
{
CTime t1;
t1=CTime::GetCurrentTime();
m_bar.SetPaneText(1,t1.Format("%H:%M:%S"));
}
CDialog::OnTimer(nIDEvent);
}
7. 添加XY坐標顯示。重寫函數OnMouseMove():
void CDlgStatusBarDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CString s;
s.Format("X=%d Y=%d",point.x,point.y);
m_bar.SetPaneText(0,s);
CDialog::OnMouseMove(nFlags, point);
}
至此,編譯運行程序,就可以看到預期的效果了。
方法二:
UINT array[4];
for(int i=0;i<4;i++)
{
array[i] = 1001 + i;
}
m_StatusBar.Create(this); //創建狀態欄窗口
m_StatusBar.SetIndicators(array,sizeof(array)/sizeof(UINT)); //添加面板
for(int n=0;n<4;n++)
{
m_StatusBar.SetPaneInfo(n,array[n],0,100); //設置面板寬度
}
CTime time = CTime::GetCurrentTime();
m_StatusBar.SetPaneText(0,_T("當前用戶:"));//設置面板文本
m_StatusBar.SetPaneText(1,_T("TM"));
m_StatusBar.SetPaneText(2,_T("當前日期:"));
m_StatusBar.SetPaneText(3,time.Format("%Y-%m-%d"));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
