簡(jiǎn)易定時(shí)器設(shè)計(jì)
需求:
要運(yùn)用番茄時(shí)間管理,沒有像文中所說的定時(shí)器,用手機(jī)也怎么方便,因?yàn)楸旧砭徒?jīng)常是在計(jì)算機(jī)前工作學(xué)習(xí)的。那么下一個(gè)軟件呢?有那么一款PomoTime,既包含了定時(shí)的功能,又含有添加Todolist,統(tǒng)計(jì)當(dāng)天的番茄時(shí)間等的功能,而我僅僅需要一個(gè)定時(shí)功能,因?yàn)閷?duì)于Todolist還是希望采用紙筆的方式進(jìn)行記錄。原來嘗試看桌面右下角的時(shí)間,還判斷一個(gè)番茄時(shí)間是否結(jié)束,發(fā)現(xiàn)工作中,往往因?yàn)檫^于集中注意力或分散注意力瀏覽網(wǎng)頁(yè)去了而忘記對(duì)時(shí)間的查看,同時(shí)又想將自己所學(xué)的知識(shí)進(jìn)行運(yùn)用,于是想到了這么個(gè)方式,自己編寫一個(gè)簡(jiǎn)易的定時(shí)器吧。
功能描述:
1. 顯示分,秒,處于桌面最前面;
2. 設(shè)定分,秒;
3. 當(dāng)設(shè)定的時(shí)間消耗完后會(huì)彈出對(duì)話框,進(jìn)行提醒;
(這里沒有采用聲音提醒的原因是若采用這種方式,會(huì)影響到別人的辦公與學(xué)習(xí)。)
語(yǔ)言選擇:
由于這僅僅是一個(gè)很簡(jiǎn)單的功能實(shí)現(xiàn),對(duì)于語(yǔ)言沒有很大的要求,選擇了C++,庫(kù)為wxWidget。
界面設(shè)計(jì):
使用wxFormBuilder
關(guān)鍵點(diǎn)描述:
在整個(gè)過程中遇到的問題的地方時(shí),如何進(jìn)行倒計(jì)時(shí)?最先想到的就是onTimer這樣類似的功能,在wxWidget庫(kù)中找到了具有該功能的wxTimer類,在手冊(cè)中這么一句話 its precision is platform-dependent, but in general will not be better than 1ms nor worse than 1s. 也就是說采用該方法進(jìn)行時(shí)間設(shè)定可能每一次都會(huì)造成1ms-1s時(shí)間上的誤差,這個(gè)誤差不是很大,對(duì)于整個(gè)的設(shè)計(jì)目的并沒有太大的影響。
關(guān)于時(shí)間處理的部分代碼如下:
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:
posted on 2012-06-28 15:35 鐘謝偉 閱讀(1440) 評(píng)論(3) 編輯 收藏 引用