欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-01 14:46:23
...

 

环境: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代替的内容。

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

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

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

 

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

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

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

 

五、软件运行结果

 

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

六、注意事项

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