您的位置:首页 > 其它

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

2017-08-23 18:09 465 查看
环境: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()是个不错的选择。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息