MFC定时关机程序的实现1

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

MFC定时关机程序的实现1

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

界面如下:

MFC定时关机程序的实现1

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

  CComboBox m_com_hour;
  CComboBox m_com_minute;
  CComboBox m_com_second;

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

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

MFC定时关机程序的实现1

 

 

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

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 }

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

 

你可能感兴趣的:(mfc)