MFC定時關機程序的實現1

寫個定時關機程序自用,界面簡單實用,最終界面以下ide

第一步,新建一個MFC對話框應用程序,拖幾個控件過來,函數

界面以下:spa

而後給下拉列表框,複選按鈕綁定變量,以方便進行操做。3d

  CComboBox m_com_hour;
  CComboBox m_com_minute;
  CComboBox m_com_second;code

第二步,先實現簡單關機功能,不經過文件讀寫進行關鍵。在選擇過期間後,肯定關機後按時關機。orm

  1,給下拉列表框添加更改事件,直接右鍵控件->選擇添加事件處理程序,選擇CBN_SELCHANGEblog

 

 

  而後編輯代碼,添加以下:索引

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 }

  如今能實現關機了,不過程序無法最小化到任務欄,實在不方便,明天繼續研究這個。

相關文章
相關標籤/搜索