MFC的状态栏CStatusBar编程

来源:互联网 发布:多空对比资金指标源码 编辑:程序博客网 时间:2024/06/12 23:53
 

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字符串显示在状态栏上;