zoukankan      html  css  js  c++  java
  • MFC定时关机程序的实现1

    写个定时关机程序自用,界面简单实用,最终界面如下

    第一步,新建一个MFC对话框应用程序,拖几个控件过来,

    界面如下:

    然后给下拉列表框,复选按钮绑定变量,以方便进行操作。

      CComboBox m_com_hour;
      CComboBox m_com_minute;
      CComboBox m_com_second;

    第二步,先实现简单关机功能,不通过文件读写进行关键。在选择过时间后,确定关机后按时关机。

      1,给下拉列表框添加更改事件,直接右键控件->选择添加事件处理程序,选择CBN_SELCHANGE

      然后编辑代码,添加如下:

    1 void CAutoShutDownDlg::OnCbnSelchangeCombo1()//
    2 {
    3     // TODO: 在此添加控件通知处理程序代码
    4     int sel = 0;
    5     sel  = m_com_hour.GetCurSel();//这个是获取当前鼠标选择的时间的索引,从零开始的
    6     hour = sel;//hour是添加的成员变量,还有minute和second,这就是关机时间
    7 }

      还有其他的分钟和秒类似这个,这里不多说了,代码如下

     1 void CAutoShutDownDlg::OnCbnSelchangeCombo2()//
     2 {
     3     // TODO: 在此添加控件通知处理程序代码
     4     int sel = 0;
     5     sel  = m_com_minute.GetCurSel();
     6     minute = sel;
     7 }
     8 
     9 
    10 void CAutoShutDownDlg::OnCbnSelchangeCombo3()//
    11 {
    12     // TODO: 在此添加控件通知处理程序代码
    13     int sel = 0;
    14     sel  = m_com_second.GetCurSel();
    15     second = sel;
    16 }
    View Code

    现在可以获取程序中选择的时间了,然后就是获取这些信息,在单击过确定按钮后弹出确认窗口,确认关机时间。

      在资源窗口直接双击确认按钮进入按钮按下消息响应程序

     1 void CAutoShutDownDlg::OnBnClickedOk()
     2 {
     3     // TODO: 在此添加控件通知处理程序代码
     4     //复选框是否选中,这个处理是否添加开机启动项,后面再说这个
     5     UINT ischecked = IsDlgButtonChecked(IDC_CHECK1);
     6     
     7     //获取选择的时间
     8     hour = m_com_hour.GetCurSel();
     9     minute = m_com_minute.GetCurSel();
    10     second = m_com_second.GetCurSel();
    11 
    12     //数据进行格式化处理
    13     CString str = "";
    14     str.Format("%2d时%2d分%2d秒", hour, minute, second);
    15 //    GetDlgItem(IDC_STATIC_NOW)->SetWindowText(str);
    16     int resoult = MessageBox("确定要在"+str+"关机吗?","是否关机?",MB_OKCANCEL);
    17     if (resoult == IDOK)
    18     {
    19         //是否添加到启动项,这里用来检查是否写入到开机启动项,直接写入注册表,这个后面再说
    20         AutoStart(ischecked);
    21         //更新程序窗口中显示的关机时间
    22         GetDlgItem(IDC_STATIC_SHUT)->SetWindowText(str);
    23 
    24         FILE  *file;
    25         int err;
    26         err = fopen_s(&file, "c:\ShutDownTime.txt", "w+");
    27         if (!err)
    28         {
    29             err = fprintf_s(file, "%02d%02d%02d",hour, minute, second);
    30             if (err == EOF)
    31             {
    32                 MessageBox("请重试!");
    33             }
    34         }
    35         else
    36         {
    37             MessageBox("文件打开错误");
    38         }
    39         if (fclose(file) != 0)
    40         {
    41             MessageBox("文件关闭错误");
    42         }
    43 
    44     }
    45 }

    现在来看看OnInitDialog()函数里做了什么

      这里主要用来读取上次保存的关机时间

     1 //读取软件设置的默认时间
     2     FILE  *file;
     3     errno_t err;
     4     err = fopen_s(&file, "c:\ShutDownTime.txt", "a+");
     5     if (!err)
     6     {
     7         fscanf_s(file, "%02d%02d%02d",&hour, &minute, &second);
     8     }
     9     else
    10     {
    11         MessageBox("文件打开错误");
    12     }
    13     if (fclose(file) != 0)
    14     {
    15         MessageBox("文件关闭错误");
    16     }
    17     str = "";
    18     str.Format("%2d时%2d分%2d秒", hour, minute, second);
    19     GetDlgItem(IDC_STATIC_SHUT)->SetWindowText(str);
    20     SetTimer(0,100,NULL);//定时刷新当前时间
    21     SetTimer(1, 1000, NULL);//定时检查是否到达关机时间

      这里主要用了两个定时器来检查关机时间。

      还有一个默认显示的关机时间,当第一次打开程序时,并没有关机时间,这里默认现在当前的时间,关机时间会在确认关机后更新。

     1     GetTime();//获取当前时间,自定义的成员函数
     2     CString str = "";
     3     str.Format("%2d时%2d分%2d秒", hour, minute, second);
     4     GetDlgItem(IDC_STATIC_NOW)->SetWindowText(str);
     5 
     6 
     7     int temp = 0;
     8     int i = 0;
     9     //设置默认显示的小时
    10     str = "";
    11     for (i = 0; i <= 23; i++)
    12     {
    13         str.Format("%2d时", i);
    14         m_com_hour.AddString(str);
    15     }
    16     m_com_hour.SetCurSel(hour);
    17     //设置默认显示的分钟
    18     str = "";
    19 
    20     for (i = 0; i <= 59; i++)
    21     {
    22         str.Format("%2d分", i);
    23         m_com_minute.AddString(str);
    24     }
    25     m_com_minute.SetCurSel(minute);
    26     //设置默认显示的妙
    27     str = "";
    28 
    29     for (i = 0; i <= 59; i++)
    30     {
    31         str.Format("%2d秒", i);
    32         m_com_second.AddString(str);
    33     }
    34     m_com_second.SetCurSel(second);

    其中GetTime()为自定义的成员函数,用于获取当前时间

    1 void CAutoShutDownDlg::GetTime()
    2 {
    3     CTime time1 = CTime::GetCurrentTime();//获取系统当前时间
    4     hour = time1.GetHour();
    5     minute = time1.GetMinute();
    6     second = time1.GetSecond();
    7 }

      现在能实现关机了,不过程序没法最小化到任务栏,实在不方便,明天继续研究这个。

  • 相关阅读:
    Java语言
    Java面向对象编程思想
    final关键字
    abstract关键字
    对象初始化过程
    访问修饰符
    继承
    面向对象设计
    static
    封装
  • 原文地址:https://www.cnblogs.com/songliquan/p/3617287.html
Copyright © 2011-2022 走看看