状态栏
给基于对话框的程序添加状态栏,在状态栏中显示当前鼠标横纵坐标的信息以及当前系统时间
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 }
效果图: