MFC的状态栏CStatusBar编程
1. 新建一个多文档的MFC应用程序;
2. 状态栏的定义:在CMainFrame类中定义,如下:
protected: // control bar embedded members
CStatusBar m_wndStatusBar;
3. 在CMainFrame类的OnCreate函数里,生成状态栏:
//
//状态栏
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
注意,上述有一个变量indicators;它是一个静态的一个数组,它的定义是有MFC自动生成的;具体代码如下:
//
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
说明:indicators存放的是字符串的ID 号;不同的ID号,对应不同的字符串;
如果想要在右下角的状态栏上继续添加状态栏,可以先新建一个字符串的资源,设置相应的ID号;将该ID号添加到indicators数组中即可;
比如:我们新建两个字符串资源,属性为 IDS_PROCESS 进度 IDS_TIME 时间 ;然后将它们的ID号加入到indicators数组中;运行即可;
4. 在状态栏实时显示系统时间
很明显,实时显示需要动态每隔一秒钟显示一下时间,因此需要用到WM_TIME消息响应;因此对CMainFrame类增加WM_TIME消息响应;
4.1 在类的OnCreate函数中,设置定时器周期; SetTimer(1,1000,NULL);
4.2 在OnTimer函数中添加如下代码:
CTime time=CTime::GetCurrentTime();//获得当前时间
CString str="时间"+time.Format("%H-%M-%S");//将时间转化为字符串
int index=0;//定义一个整型变量,用于存储字符串资源的ID,初始化为0
index=m_wndStatusBar.CommandToIndex(IDS_TIME);
//一下是为了获得字符串STR的空间大小,是str字符串完整的呈现出来;
CClientDC dc(this);
CSize zs=dc.GetTextExtent(str);//获得str字符串画出来时的大小
m_wndStatusBar.SetPaneInfo(index,IDS_TIME,SBPS_NORMAL,zs.cx);//设置索引为index的状态栏的宽度
m_wndStatusBar.SetPaneText(index,str,TRUE);//将含有时间的str字符串显示在状态栏上;