1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【MFC】显示系统时间的状态栏

【MFC】显示系统时间的状态栏

时间:2021-01-06 17:55:09

相关推荐

【MFC】显示系统时间的状态栏

00. 目录

文章目录

00. 目录01. 案例概述02. 开发环境03. 关键技术04. 程序设计05. 秘笈心法06. 源码下载07. 附录

01. 案例概述

状态栏主要用于显示程序运行时的状态以及一些相关的信息,例如,在状态栏中显示登录程序的用户名,显示鼠标的位置,本案例则是要显示系统的当前时间。效果如下图所示。

02. 开发环境

系统环境:Windows 10

开发环境:Visual Studio

03. 关键技术

可以通过CTime类的GetCurrentTime方法获得系统当前时间,然后在按秒增长的定时器中不断更新时间。GetCurrentTime方法是一个静态方法,其语法如下:

CTime::GetCurrentTimestatic CTime PASCAL GetCurrentTime( );说明:此成员函数返回一个代表当前时间的CTime对象。返回值是一个CTime类型的时间。在使用该方法时,不必定义CTime类的对象,可以直接通过CTime类来调用,如下: 示例:// CTime::GetCurrentTime示例:CTime t = CTime::GetCurrentTime();

04. 程序设计

(1)新建一个基于对话框的工程。

(2)在对话框类中定义一个CStatusBar类型变量m_StatusBar。

(3)在对话框的OnInitDialog方法中创建状态栏并显示系统时间,同时启动定时器修改显示的时间,函数代码如下。

void CMy1StatusDlg::OnTimer(UINT_PTR nIDEvent){// TODO: 在此添加消息处理程序代码和/或调用默认值CTime time;time = CTime::GetCurrentTime();m_StatusBar.SetPaneText(3, time.Format("%H:%M:%S"));CDialogEx::OnTimer(nIDEvent);}BEGIN_MESSAGE_MAP(CMy1StatusDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_TIMER()END_MESSAGE_MAP()// CMy1StatusDlg 消息处理程序BOOL CMy1StatusDlg::OnInitDialog(){CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动// 执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO: 在此添加额外的初始化代码UINT array[4];for (int i = 0; i < 4; i++){array[i] = 100 + i;}//创建状态栏窗口m_StatusBar.Create(this);//添加面板m_StatusBar.SetIndicators(array, sizeof(array) / sizeof(array[0]));//设置面板宽度for (int i = 0; i < 4; i++){m_StatusBar.SetPaneInfo(i, array[i], 0, 80);}//设置面板信息m_StatusBar.SetPaneText(0, TEXT("当前用户"));m_StatusBar.SetPaneText(1, TEXT("沧海一笑"));m_StatusBar.SetPaneText(2, TEXT("当前时间"));//获取当前时间CTime time;time = CTime::GetCurrentTime();m_StatusBar.SetPaneText(3, time.Format("%H:%M:%S"));RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);//设置定时器SetTimer(1, 1000, NULL);return TRUE; // 除非将焦点设置到控件,否则返回 TRUE}

05. 秘笈心法

系统时间的显示位置

在状态栏显示系统时间,关键是要实时对系统时间进行更新,实例中没有进行复杂运算的操作,如果有复杂的运算势必会占用大量的CPU时间,此时要能实时显示系统时间,需要启动一个线程来进行时间的更新。

06. 源码下载

下载:【MFC】显示系统时间的状态栏.rar

07. 附录

参考: 《Visual C++从入门到精通(项目案例版)》

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。