与菜单栏和工具栏一样,也可以再对话框窗口中添加状态栏。
下面给出本次试验的demo
实现了一个简单的状态栏和窗口鼠标位置的响应。
1.我们需要在String table中添加两个新的ID: ID_INDICATOR_X , ID_INDICATOR_Y,分别用来标识状态栏的两个窗格。
2.我们需要在dlg的头文件中定义
CStatusBar m_bar;
以及在dlg.cpp中添加静态窗格数组
static UINT BASED_CODE indicators[] = {
ID_INDICATOR_X,
ID_INDICATOR_Y
};
然后在OninitDialog中创建状态栏
m_bar.Create(this);
m_bar.SetIndicators(indicators, 2);
CRect rect;
GetClientRect(&rect);
m_bar.SetPaneInfo(0, ID_INDICATOR_X, SBPS_NORMAL, rect.Width() - 100);
m_bar.SetPaneInfo(1, ID_INDICATOR_Y, SBPS_STRETCH, 0);
m_bar.GetStatusBarCtrl().SetBkColor(RGB(180, 180, 180));
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, AFX_IDW_CONTROLBAR_FIRST);
3.为鼠标移动消息添加响应函数
void CMFCApplication7Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString s, s1;
s.Format(_T("鼠标光标的位置:X = %d"), point.x);
s1.Format(_T("Y = %d"), point.y);
m_bar.SetPaneText(0, s);
m_bar.SetPaneText(1, s1);
CDialogEx::OnMouseMove(nFlags, point);
}
在创建状态栏时,一般不直接使用create函数设置状态栏的各种属性,而使用m_bar.Create(this)语句来创建,然后通过setPaneInfo()来设置属性。
在创建状态栏后,要在对话框中显示,就需要调用RepositionBars()函数来完成控制条窗口的重新设置。
学习是个艰难的过程,坚持下去就一定会成功,让我们一起努力吧