效果如图:
首先在头文件中定义一个CStatusBar变量
CStatusBar m_statusbar;
然后在初始化对话框中创建状态栏并且设置面板信息
//创建状态栏
m_statusbar.Create(this);
//创建两个面板//第一个面板是1,第二个面板是2
UINT nID[] = { 1,2 };
m_statusbar.SetIndicators(nID, 2);
//设置面板1信息 ,第一个面板,编号为1,正常显示,宽度为100
m_statusbar.SetPaneInfo(0, 1, SBPS_NORMAL, 100);
//设置面板2信息,第二个面板,编号为2,自动拉伸显示,刚开始宽度为0
m_statusbar.SetPaneInfo(1, 2, SBPS_STRETCH, 0);
//设置状态栏位置
CRect rect = { 0 };
GetClientRect(&rect);
//rect.bottom - 20是状态栏的高度位置,20是状态的高度
m_statusbar.MoveWindow(0, rect.bottom - 20, rect.right,20);
接着右键编辑框添加事件处理程序
void CMFCTESTDlg::OnEnChangeEdit()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
CString strText;
GetDlgItemText(IDC_EDIT, strText);
strText.Format(_T("字数:%d"), strText.GetLength());
//在第二个面板上显示
m_statusbar.SetPaneText(1, strText);
}