MFC之为对话框窗口添加状态栏

时间:2021-01-02 17:11:39

与菜单栏和工具栏一样,也可以再对话框窗口中添加状态栏。

下面给出本次试验的demo

MFC之为对话框窗口添加状态栏



实现了一个简单的状态栏和窗口鼠标位置的响应。


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()函数来完成控制条窗口的重新设置。



学习是个艰难的过程,坚持下去就一定会成功,让我们一起努力吧