需求:
要運用番茄時間管理,沒有像文中所說的定時器,用手機也怎麼方便,因為本身就經常是在計算機前工作學習的。那麼下一個軟件呢?有那麼一款PomoTime,既包含了定時的功能,又含有添加Todolist,統計當天的番茄時間等的功能,而我僅僅需要一個定時功能,因為對於Todolist還是希望采用紙筆的方式進行記錄。原來嘗試看桌面右下角的時間,還判斷一個番茄時間是否結束,發現工作中,往往因為過於集中注意力或分散注意力浏覽網頁去了而忘記對時間的查看,同時又想將自己所學的知識進行運用,於是想到了這麼個方式,自己編寫一個簡易的定時器吧。
功能描述:
1. 顯示分,秒,處於桌面最前面;
2. 設定分,秒;
3. 當設定的時間消耗完後會彈出對話框,進行提醒;
(這裡沒有采用聲音提醒的原因是若采用這種方式,會影響到別人的辦公與學習。)
語言選擇:
由於這僅僅是一個很簡單的功能實現,對於語言沒有很大的要求,選擇了C++,庫為wxWidget。
界面設計:
使用wxFormBuilder
關鍵點描述:
在整個過程中遇到的問題的地方時,如何進行倒計時?最先想到的就是onTimer這樣類似的功能,在wxWidget庫中找到了具有該功能的wxTimer類,在手冊中這麼一句話 its precision is platform-dependent, but in general will not be better than 1ms nor worse than 1s. 也就是說采用該方法進行時間設定可能每一次都會造成1ms-1s時間上的誤差,這個誤差不是很大,對於整個的設計目的並沒有太大的影響。
全部源碼在Simple timer source code
關於時間處理的部分代碼如下:
1: // timer_app.h
2: ////////////////////////////////////////////////////////////////////////////////
3: // main application frame declaration
4: ////////////////////////////////////////////////////////////////////////////////
5:
6: class TimerFrame : public MainDialogBase
7: {
8: public:
9: TimerFrame( wxWindow *parent );
10: virtual ~TimerFrame();
11:
12: protected:
13: // protected event handlers
14: virtual void OnCloseDialog( wxCloseEvent& event );
15: virtual void OnSetButtonClick( wxCommandEvent& event );
16: virtual void OnStartButtonClick( wxCommandEvent& event );
17:
18: public:
19: void OnTimer( wxTimerEvent& event );
20:
21: private:
22: int m_minute;
23: int m_second;
24: wxTimer *m_clock;
25: wxDECLARE_EVENT_TABLE();
26: };
27:
28: // timer_app.cpp
29: // event list, combine timer event with OnTimer function
30: wxBEGIN_EVENT_TABLE(TimerFrame, MainDialogBase)
31: EVT_TIMER(TIMER_ID, TimerFrame::OnTimer)
32: wxEND_EVENT_TABLE()
33:
34: //......some code......
35:
36: TimerFrame::TimerFrame(wxWindow *parent) : MainDialogBase( parent )
37: {
38: m_clock = new wxTimer(); // create a new wxTimer
39: m_clock->SetOwner(this, TIMER_ID); // set owner, #define TIMER_ID 1000
40: m_minute = 25;
41: m_second = 0;
42: }
43:
44: //......some code......
45:
46: // count down the time and show
47: void TimerFrame::OnTimer(wxTimerEvent& event)
48: {
49: // determine the minute and second wait to show
50: if (m_second == 0 && m_minute == 0) {
51: m_clock->Stop();
52: wxMessageBox(wxT("Time over"),wxT("Timer"));
53: return;
54: } else if (m_second ==0) {
55: m_second = 59;
56: m_minute -= 1;
57: } else {
58: m_second -= 1;
59: }
60: wxString sTmp;
61: sTmp.Printf(wxT("%d"),m_minute);
62: m_minuteTextCtrl->SetValue(sTmp);
63: sTmp.Printf(wxT("%d"),m_second);
64: m_secondTextCtrl->SetValue(sTmp);
65: }
66: