MFC之对话框 添加状态栏 实时显示时间

环境:win7 ,VS2010 对话框程序。

语言:C++

功能:1.在对话框程序中添加状态栏  2.在状态栏中显示时间。 3.时间实时更新。

逻辑:对话框中先手动添加状态栏。而后通过Ctime类获取系统时间实时显示到某一控件上。在主对话框中添加WM_Timer消息。一秒重新调用一次获取时间函数及控件显示的东西。

缺点:未实现居中显示。

源代码工程链接:http://download.csdn.net/download/i_likechard/9948145

一、.h文件添加

public:

    CTime t1;//实例化一个时间类,用于保存获取的系统时间。
    void ShowtimeNow();//定时器调用的刷新函数,将实时获取的系统时间反复写入。
    void InitStatus();//初始化状态栏,此函数中将状态栏的显示进行初始化。

    //CStatic m_time;//这是一个Static控件,也是显示的实时时间。此处注释掉了。
    CStatusBar m_bar;//创建一个状态栏实例。
    CRect rect; //实例一个Rect,这个东西后面对状态栏进行等分宽度用。

二、.cpp文件中添加

1.在OnInitDialog()函数中添加

InitStatus();


 

2.定义ShowtimeNow(),以及InitStatus()

void C*******Dlg::InitStatus()
{
     //初始化状态栏,将状态栏设置为三列,前两列固定显示内容,第三列实时显示时间
     static UINT BASED_CODEindicators[] = {
         ID_STATUSBAR_0,
         ID_STATUSBAR_1
     };
     m_bar.Create(this);
     m_bar.SetIndicators(indicators,3); 
     GetClientRect(&rect);            //获取当前对话框的宽度
     CString str1;
     t1 = CTime::GetCurrentTime();
     str1=t1.Format("%Y年%m月%d日 %H:%M:%S");
     //m_time.SetWindowTextA(str1);    

     //设置状态栏前两列显示内容。使用函数为SetPaneInfo(第几列,手工添加的StringTable(相当于字符串常量,等同于宏定义一个ID 代表某一字符串),显示风格,显示宽度)
     m_bar.SetPaneInfo(0,ID_STATUSBAR_0,  SBPS_POPOUT ,rect.Width()/3);
     m_bar.SetPaneInfo(1,ID_STATUSBAR_1, SBPS_POPOUT ,rect.Width()/3);
     //第三列显示时间
     m_bar.SetPaneText(2, str1,1);
     //设置状态栏填充颜色
     m_bar.GetStatusBarCtrl().SetBkColor(RGB(255,255, 255));
     //启动定时器,SetTimer(ID,间隔时间,窗口句柄(NULL时为默认))
     SetTimer(1,1000,NULL);
     RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST, AFX_IDW_CONTROLBAR_FIRST);

}

void C******Dlg::ShowtimeNow()
{
      CString str1;
     //获取系统时间,并进行显示
     t1 = CTime::GetCurrentTime();
     str1=t1.Format("%Y年%m月%d日 %H:%M:%S");
     //m_time.SetWindowTextA(str1);
     //在状态栏的第三个列上显示时间
     m_bar.SetPaneText(2, str1,1);
}



 

三、由于状态栏前两列用了StringTable,所以需要在资源文件中StringTable中新建两个ID名为ID_STATUSBAR_0何ID_STATUSBAR_1。

双击打开StringTable,而后右键右侧的表格,选择“新建字符串"。在ID行输入对应的ID名称,标题栏填写想要此ID代替的内容。

四、为该对话框添加定时器

在程序的资源文件中,右键该对话框。选择类向导。

在弹出的消息中添加如下代码:

void C******Dlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    switch (nIDEvent)
    {
    case 1:
       ShowtimeNow();       //反复调用这个函数,进行时间显示刷新
       break;
    default:
       break;
    }
    CDialogEx::OnTimer(nIDEvent);
}

五、软件运行结果

六、注意事项

1、在析构函数中调用killtimer()是个不错的选择。

  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值