状态栏

给基于对话框的程序添加状态栏,在状态栏中显示当前鼠标横纵坐标的信息以及当前系统时间

1.在主对话框类中添加一个CStatusBar类型的成员

1 class CToolBarDemoDlg : public CDialogEx
2 {
3     //省略
4     CStatusBar m_StatusBar;
5     //省略
6 };

2.在主对话框的初始化函数OnInitDialog定义一个指示器数组

 1 BOOL CToolBarDemoDlg::OnInitDialog()
 2 {
 3     //省略
 4     //定义一个指示器数组
 5     static UINT uIndicators[] = 
 6     {
 7         ID_SEPARATOR,           //提示窗格,固定为ID_SEPARATOR
 8         ID_INDICATOR_TIME,      //状态窗格,某个字符串资源ID
 9     };
10     //省略      
11 }

通常状态栏最左边的第一个窗格是提示行,长度可伸缩,即该窗格占据其他窗格未使用的状态栏长度...剩余窗格从右往左一个接一个地排列

3.在主对话框的初始化函数OnInitDialog创建状态栏对象,并绑定指示器数组

 1 BOOL CToolBarDemoDlg::OnInitDialog()
 2 {
 3     //省略
 4     //定义一个指示器数组
 5     static UINT uIndicators[] = 
 6     {
 7         ID_SEPARATOR,               //提示行
 8         ID_INDICATOR_TIME,          //时间字符串
 9     };
10     
11     //创建状态栏并绑定指示器数组
12     if (!m_StatusBar.Create(this)||!m_StatusBar.SetIndicators(uIndicators,sizeof(uIndicators)/sizeof(UINT)))
13     {
14         TRACE0("Failed to create statusbar\n");
15         return -1;
16     }
17     //省略
18 }

4.在主对话框的初始化函数OnInitDialog中创建一个定时器并且设置状态栏窗格的宽度,并显示系统时间

 1 BOOL CToolBarDemoDlg::OnInitDialog()
 2 {    
 3     //省略  
 4     SetTimer(1,1000,NULL);                                                    //创建定时器
 5     CTime time = CTime::GetCurrentTime();
 6     CString str = time.Format("%H:%M:%S");                                    //获取系统时间字符串
 7     CClientDC dc(this);                             
 8     CSize sz = dc.GetTextExtent(str);                                         //获取字符串的宽度
 9     m_StatusBar.SetPaneInfo(1,ID_INDICATOR_TIME,SBPS_STRETCH, sz.cx + 200);   //设置第二个窗格的宽度
10     m_StatusBar.SetPaneText(1,str);                                           //在第二个窗格中显示系统时间
11     //省略
12 }

5.添加WM_TIMER消息的响应

 1 void CToolBarDemoDlg::OnTimer(UINT_PTR nIDEvent)
 2 {     
 3     if (nIDEvent == 1)
 4     {   
 5         CTime time = CTime::GetCurrentTime();
 6         CString str = time.Format("%H:%M:%S");
 7         m_StatusBar.SetPaneText(1,str);
 8     }
 9 
10     CDialogEx::OnTimer(nIDEvent);
11 }

6.添加WM_MOUSEMOVE消息的响应

 1 void CToolBarDemoDlg::OnMouseMove(UINT nFlags, CPoint point)
 2 {
 3     
 4     CString str;
 5     CStatusBar* pStatusBar = NULL;
 6     str.Format(_T("X=%d,Y=%d"),point.x,point.y);
 7     m_StatusBar.SetPaneText(0,str);                //将状态栏第一个窗格的文本修改为鼠标的位置信息
 8     
 9     CDialogEx::OnMouseMove(nFlags, point);
10 }

效果图:

posted @ 2015-03-23 16:17  (安于此生)  阅读(207)  评论(0编辑  收藏  举报