编写一个闹钟和定时关机工具(MFC VS2010)

news/2024/10/17 1:57:24/

这个小工具在自己生活当中能用到,运行软件以后,会显示当前的系统时间,然后你可以设定时间,再选择是定时响铃还是关机。截图如下:

Untitled

前言:本程序采用visual studio 2010 ,对话框类型的应用程序,生成的类视图如下,右边为CTimeDlg类的本分函数:

Untitled1

主要的实现方法和关键点如下:

1.怎样获得系统时

为CTimeDlg类添加成员变量 CTime m_CurrentTime;

                                             m_CurrentTime=CTime::GetCurrentTime();

然后获得int型的时/分/秒:   m_H=m_CurrentTime.GetHour();

                                            m_M=m_CurrentTime.GetMinute();

                                            m_S=m_CurrentTime.GetSecond();

   其中m_H/m_M/m_S是三个编辑框的成员函数。

2.动态显示系统时间

动态显示系统时间需要用到定时器,然后每一秒钟都会发送WM_TIME。还要给CTimeDlg类添加WM_TIME消息处理函数OnTime().

为此首先要建立一个计时器:

                     SetTimer(1,1000,NULL);   //use here ,after the m_whnd has been created!!!

  因为有CWnd::SetTimer(),所以第三个参数是NULL,会由void CTimeDlg::OnTimer(UINT_PTR nIDEvent)经过消息映射来处理。

另外要注意的是在调用SetTimer(1,1000,NULL); 之前必须已经建立了窗口也就是m_hwnd已经被赋值,应为SetTimer(1,1000,NULL)继承于CWnd,必须要有一个对象才能调用,所以我在:BOOL CTimeDlg::OnInitDialog()里面定义了计时器。刚开始自己是在CTimeDlg::CTimeDlg(CWnd* pParent /*=NULL*/)构造函数里定义结果是出现断言错误,因为m_hwnd还未被建立。

3.播放铃声

此版本我没有添加可自定义自己的铃声这个功能,可以告诉大家DirectShow可以实现播放各种格式的音频和视频,如果有需要以后自己会加上这个功能,另外还有最小化到托盘等琐碎功能,(嘿嘿,其实就是很琐碎,不断地调试,不断的查阅MSDN~~)。

使用了播放系统错误警告的函数:MessageBeep(0x00000030L);

4.关机

有好几个函数可以实现系统关机,此处选择的是:

     InitiateSystemShutdown(NULL,_T("Attention! Your Computer is going to SHUTDOWN."),5,FALSE,FALSE);

好了主要的点都已经列清楚,对于其中各个函数的意义和参数,大家可以查阅MSDN,详细的就不说了,下面是主要代码:

/主要是编辑框实现DDX动态数据交换

void CTimeDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, m_H);
    DDX_Text(pDX, IDC_EDIT2, m_M);
    DDX_Text(pDX, IDC_EDIT3, m_S);
    DDX_Text(pDX, IDC_EDIT4, m_AP);
    DDX_Text(pDX, IDC_EDIT5, m_SetH);
    DDV_MinMaxInt(pDX, m_SetH, 0, 24);
    DDX_Text(pDX, IDC_EDIT6, m_SetM);
    DDV_MinMaxInt(pDX, m_SetM, 0, 60);
    DDX_Text(pDX, IDC_EDIT7, m_SetS);
    DDV_MinMaxInt(pDX, m_SetS, 0, 60);
}

BEGIN_MESSAGE_MAP(CTimeDlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_WM_TIMER()
    ON_EN_CHANGE(IDC_EDIT1, &CTimeDlg::OnEnChangeEdit1)
    ON_EN_CHANGE(IDC_EDIT2, &CTimeDlg::OnEnChangeEdit2)
    ON_EN_CHANGE(IDC_EDIT3, &CTimeDlg::OnEnChangeEdit3)
    ON_EN_CHANGE(IDC_EDIT4, &CTimeDlg::OnEnChangeEdit4)
    ON_EN_CHANGE(IDC_EDIT5, &CTimeDlg::OnEnChangeEdit5)
    ON_EN_CHANGE(IDC_EDIT6, &CTimeDlg::OnEnChangeEdit6)
    ON_EN_CHANGE(IDC_EDIT7, &CTimeDlg::OnEnChangeEdit7)
    ON_BN_CLICKED(IDC_BUTTON1, &CTimeDlg::OnBnClickedButton1)
    ON_BN_CLICKED(IDC_BUTTON2, &CTimeDlg::OnBnClickedButton2)
END_MESSAGE_MAP()

//处理WM_TIME消息的函数

void CTimeDlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    if(nIDEvent==1)
    {
        m_CurrentTime=CTime::GetCurrentTime();
        if (m_CurrentTime.GetHour()>12)
        {
            m_H=m_CurrentTime.GetHour()-12;
            m_AP=_T("PM");
        }
        else
        {
            m_H=m_CurrentTime.GetHour();
            m_AP=_T("AM");
        }
        m_M=m_CurrentTime.GetMinute();
        m_S=m_CurrentTime.GetSecond();
        OnEnChangeEdit1();
        OnEnChangeEdit2();
        OnEnChangeEdit3();
        OnEnChangeEdit4();

        //function for your choose;
        if ((m_SetH==m_CurrentTime.GetHour())&&(m_SetM==m_M))
        {
            if(m_ChooseFunc==1)
                   MessageBeep(0x00000030L);
            else if(m_ChooseFunc==2)
                  InitiateSystemShutdown(NULL,_T("Attention! Your Computer is going to SHUTDOWN."),5,FALSE,FALSE);
        }
    }

下载链接:http://download.csdn.net/source/2763864


http://www.ppmy.cn/news/429076.html

相关文章

linux cpu跑分软件,Geekbench 5 5.2.3 硬件性能跑分工具 特别版

CPU基准测试 Geekbench 5测量处理器的单核和多核电源,从查看电子邮件到拍照到播放音乐,或者一次性完成所有操作。Geekbench 5的CPU基准测试可以测量新应用领域的性能,包括增强现实和机器学习,因此您将了解系统与前沿的接近程度。 …

软路由cpu性能跑分

软路由cpu性能跑分 cpu核心功耗单核多核N50304/46W14052909N50004/46W11522608N41204/46W11072477N41004/46W9952238N42004/46W8362027N34504/46W7341842J19004/410W5431797 引用: youtube老白

跑分cpu_一款神秘的联发科CPU:跑分达到了622409分

超过10万人正在关注 赶快来关注吧,这里有你想找的热点资讯,这里有你想要的各种资料,还有海量的资源,还在等什么。快来关注,大佬带你开车。 11月30日,安兔兔官方微博曝光了一款神秘的联发科CPU。这款CPU采用…

java cpu 分析工具_java性能分析 - CPU飙高分析工具

背景 有处理过生产问题的同学基本都能遇到系统忽然缓慢,CPU突然飙升,甚至整个应用请求不可用。当出现这种情况下,在不影响数据准确性的前提下,我们应该尽快导出jstack和内存信息,然后重启系统,尽快回复系统…

跑分cpu_【新机】天玑800+跑分性能出炉:CPU干翻骁龙765G,比肩麒麟985 | 骁龙768G性能曝光...

近日一款型号为M2004J7BC的小米新机出现在了GeekBench跑分库中,应该就是即将亮相发布的redmi Note 9系列。新机搭载了天玑820,型号为MT6875(天玑800为MT6873)。CPU由4颗2.6GHz的A76大核4颗2.0GHz的A55小核构成,GPU为Mali-G57。 Geekbench5 天…

跑分cpu_跑分完爆骁龙 865?明年这些中端处理器真的要起飞

2013 年,骁龙 800 处理器手机的安兔兔跑分,是 3.3 万分。 2020 年,骁龙 865 处理器手机跑分是 —— 67 万分。(这个分数要记住,重点) 七年时间,同一系列在同一平台跑出了将近 20 倍的分数差距。 这,也就是手…

不同操作系统进行跑分测试【win、linux】

不同操作系统进行跑分测试【win、linux】 跑分通常是指,我们通过一些专业的软件来综合检测一个计算机的总体性能的方法 1 Windows 1.1 操作步骤 从网上下载一些专业的软件【如:鲁大师、everest等】如果是win10的话,可以使用微软自带的跑分工…

linux 性能测试 跑分,测试10秒钟,分析8小时,性能评估只看跑分可不够

写在前面:大约4年前在中科院软件所,为评估国产兆芯CPU性能,我接触到一些benchmark,涉及CPU指标的就有ubench、sysbench、c-ray、SPEC和unixbench等。 工具在手,不要动脑,跑起来就行。后来情况变了,每个月都有数个系统性能调优的kpi压在身上,你不光要知道这些性能怎么测…