Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1828759
  • 博文数量: 195
  • 博客积分: 4227
  • 博客等级: 上校
  • 技术积分: 2835
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-04 10:39
文章分类

全部博文(195)

文章存档

2013年(1)

2012年(26)

2011年(168)

分类: C/C++

2011-11-14 13:40:24

该说也是一个老生常谈的问题了,写一写总结回顾一下。

两种方法:

1.使用CStatusBar类。步骤如下:

    (1)在C***Dlg类为添加成员变量:CStatusBar m_StatusBar
   (2)在String Table中添加一些要显示在状态栏上的字符串。
   (3)在C***Dlg源文件中定义一个全局数组:
          static UINT indicators[]={
                           ID_SEPARATOR,
                          IDS_COMPANY,
                          IDS_MICROSOFT,
                         IDS_TIME
           };
   (4)在OnInitDialog()函数中添加如下代码:
             CRect Rect;
            GetClientRect(&Rect);                           //获取客户区域

            if(!m_StatusBar.Create(this) || !m_StatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)))
           {
                    TRACE0("Failed to create status bar\n");
                     return -1;
             }
           m_StatusBar.MoveWindow(0,Rect.bottom-20,Rect.right,20);             //设置状态栏位置

2.使用CStatusBarCtrl类。步骤如下:

   (1)在C***Dlg类为添加成员变量:CStatusBarCtrl m_StatusBar
   (2)在OnInitDialog()函数中添加如下代码:
        CRect Rect;
        this->GetClientRect(&Rect);                  //获取客户区域

         m_StatusBar.Create(WS_CHILD | WS_VISIBLE,CRect(0,0,0,0),this,IDR_STATUSBAR);

        int width[5];
        width[0]=Rect.Width()*0.1;
       width[1]=Rect.Width()*0.4;
        width[2]=Rect.Width()*0.6;
        width[3]=Rect.Width()*0.8;
        width[4]=Rect.Width();

        m_StatusBar.SetParts(5,width);
        m_StatusBar.SetText("公司",0,0);
        m_StatusBar.SetText("微软(中国)有限公司",1,0);
        m_StatusBar.SetText("系统时间",3,0);

        SetTimer(1,1000,NULL);                             //设置定时器
   (3)在C***Dlg类上添加WM_TIMER消息响应,编写响应函数OnTimer(UINT nIDEvent):
          CTime time=CTime::GetCurrentTime();             //获取当前时间
          CString str=time.Format("%H:%M:%S");             //时间格式化为字符串

          m_StatusBar.SetText(str,4,0);

最终效果:

注解:SetParts函数的原型如下:

BOOL SetParts( int nParts, int* pWidths );

其中nParts指示将状态栏分为多少个部分;pWidths指向一个int型的数组,数组中每一个元素指示状态栏各部分相对于客户区域的右边界。

SetText函数的原型如下:

BOOL SetText( LPCTSTR lpszText, int nPane, int nType );

其中lpszText指向状态栏字符串;nPane指示要设置文本的状态栏部分的索引号;nType指示绘画操作的类型。

阅读(2768) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~