如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图)。
1. 首先,打开在资源视图的String Table并添加两个ID:ID_INDICATOR_NISH 和ID_INDICATOR_TIME,如下图
2. 在该对话框的头文件中添加一个CStatusBar类对象
CStatusBar m_bar;
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));
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); }
至此,编译运行程序,就可以看到预期的效果了。