版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> C++面向?qū)ο笳n程設(shè)計(jì)報(bào)告</p><p> 院(系): 計(jì)算機(jī)工程學(xué)院 </p><p> 專(zhuān)業(yè): 網(wǎng)絡(luò)工程 </p><p> 班級(jí): 學(xué)號(hào): </p><p> 題目: 指針式時(shí)鐘
2、 </p><p> 一、 課程設(shè)計(jì)目的</p><p> 時(shí)鐘幾乎是每個(gè)人生活中必備的生活用品。時(shí)鐘雖小確非常重要。一款良好的時(shí)鐘可以給人們帶來(lái)極大的便利。當(dāng)然,現(xiàn)在關(guān)于時(shí)鐘的各種應(yīng)用程序?qū)映霾磺?,我的目的是設(shè)計(jì)一款界面簡(jiǎn)單、方便易用、功能相對(duì)豐富的指針式時(shí)鐘程序。為了達(dá)到上述目標(biāo),以及課程設(shè)計(jì)的要求,結(jié)合自己自身的情況,選擇了PC平臺(tái)、Windows操作系統(tǒng)、Visual C+
3、+ 6.0開(kāi)發(fā)平臺(tái)、MFC框架來(lái)實(shí)現(xiàn)自己的程序。而且希望能通過(guò)自己這款小應(yīng)用程序的設(shè)計(jì),來(lái)掌握面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,了解C++面向?qū)ο蟮脑O(shè)計(jì)方法和技巧,有效地、深刻地理解課程內(nèi)容,體會(huì)理論、方法和設(shè)計(jì)原則;培養(yǎng)分析實(shí)際問(wèn)題和解決問(wèn)題的能力,具備使用面向?qū)ο蟪绦蛟O(shè)計(jì)開(kāi)發(fā)工具設(shè)計(jì)實(shí)際系統(tǒng)的能力。</p><p><b> 課程設(shè)計(jì)內(nèi)容及要求</b></p><p>
4、 程序所實(shí)現(xiàn)的功能:運(yùn)行界面是一指針式時(shí)鐘,包括時(shí)分秒三個(gè)指針,有12個(gè)鐘點(diǎn)的顯示,并通過(guò)指針的轉(zhuǎn)動(dòng)來(lái)實(shí)時(shí)更新時(shí)間。同時(shí)可以顯示相應(yīng)時(shí)間的數(shù)字鐘形式。通過(guò)菜單可以實(shí)現(xiàn)鬧鈴功能、表盤(pán)背景、指針顏色設(shè)置、倒計(jì)時(shí)等功能。同時(shí)為程序窗口增加了一張精美圖片作為背景</p><p><b> 系統(tǒng)分析與設(shè)計(jì)</b></p><p><b> 系統(tǒng)分析</b&g
5、t;</p><p> 為了使程序的顯示更加美觀,該程序使用了C++可視化程序設(shè)計(jì)方法進(jìn)行設(shè)計(jì)。在可視化程序設(shè)計(jì)中,建立了一個(gè)MFC單文檔應(yīng)用程序工程,該工程包括了視圖類(lèi)、文檔類(lèi)對(duì)話框類(lèi)和主框架類(lèi)。在主框架類(lèi)中修改窗口等屬性,使整個(gè)時(shí)間的顯示更加協(xié)調(diào)。模擬電子時(shí)鐘是一個(gè)顯示和計(jì)時(shí)的小程序,因此只要在視圖類(lèi)和文檔類(lèi)添加相關(guān)的屬性和方法即可完成模擬電子時(shí)鐘的功能。</p><p> 文檔類(lèi)
6、定義時(shí)鐘的相關(guān)屬性,包括int類(lèi)型的year、month、day、hour、minute、second,和包括CString類(lèi)型的str_year、str_month、str_day、str_hour、str_minute、str_second等信息。int類(lèi)型的時(shí)間日期屬性用以計(jì)算,CSrting類(lèi)型的時(shí)間日期屬性用以顯示,通過(guò)CString類(lèi)中的成員函數(shù)Formart可以把int型的數(shù)據(jù)轉(zhuǎn)成CString型的。</p>
7、<p> 視圖類(lèi)實(shí)現(xiàn)時(shí)鐘的主要功能,在該類(lèi)的OnDraw函數(shù)里面對(duì)時(shí)間日期進(jìn)行顯示輸出。向窗口輸出信息時(shí),為了保證高刷新率下繪圖不閃爍,使用內(nèi)存繪圖的方法,在內(nèi)存中創(chuàng)建一個(gè)與屏幕繪圖區(qū)域一致的對(duì)象,使得重繪視圖時(shí)可以大大提高運(yùn)行速度。為了使計(jì)時(shí)能夠達(dá)到幾乎無(wú)誤差,使用了一個(gè)獲取系統(tǒng)兩秒間隔作為計(jì)時(shí)間隔的方法,使得計(jì)時(shí)間隔和系統(tǒng)時(shí)間間隔一致。每次重繪視圖的時(shí)候都重新獲取系統(tǒng)時(shí)間,當(dāng)該兩次獲得的秒不一致時(shí),就對(duì)時(shí)間加一秒。通過(guò)
8、一個(gè)計(jì)時(shí)器消息,使視圖50ms刷新一次,以保證時(shí)間的準(zhǔn)確性。</p><p> 在視圖類(lèi)中需要添加幾個(gè)方法:用于計(jì)算時(shí)間的方法RunTime()、計(jì)算星期的方法Week()、int型轉(zhuǎn)CString型的方法Change()、獲取系統(tǒng)時(shí)間的方法GetDateTime()、重獲系統(tǒng)時(shí)間方法OnReset()和計(jì)時(shí)器消息。</p><p> 在計(jì)算時(shí)間日期的時(shí)候,每達(dá)到1秒的時(shí)候?qū)econ
9、d進(jìn)行加1,然后判斷是否達(dá)到60秒,達(dá)到的話minute就加1,同樣的方法對(duì)hour、day、month和year進(jìn)行計(jì)算,在對(duì)day計(jì)數(shù)時(shí),考慮到大小月和閏年,對(duì)day進(jìn)行加1時(shí),判斷是哪一月和是否為閏年。在確定年、月、日之后,使用函數(shù)Week()進(jìn)行對(duì)星期幾的計(jì)算,根據(jù)1901年每月1號(hào)是星期幾可以得出現(xiàn)在是星期幾。</p><p> 在這個(gè)程序中,還使用了一個(gè)對(duì)話框類(lèi),使用對(duì)話框來(lái)對(duì)時(shí)間日期的設(shè)置。在菜單
10、欄里添加一個(gè)“設(shè)置時(shí)間”的選項(xiàng)和一個(gè)菜單消息,當(dāng)點(diǎn)擊這個(gè)選項(xiàng)就會(huì)彈出設(shè)置時(shí)間日期的對(duì)話框,對(duì)話框中編輯控件設(shè)定了每個(gè)值的取值范圍,從而對(duì)輸入錯(cuò)誤進(jìn)行排除。</p><p><b> 系統(tǒng)設(shè)計(jì)</b></p><p><b> 2.1 模塊設(shè)計(jì)</b></p><p><b> 主要類(lèi)圖</b>&
11、lt;/p><p><b> 各模塊關(guān)系圖</b></p><p> 畫(huà)出主程序及其主要模塊的流程圖:</p><p><b> 2.2算法流程圖</b></p><p> OnDraw函數(shù)流程圖</p><p><b> 系統(tǒng)測(cè)試與調(diào)試分析</b>
12、;</p><p><b> 1、系統(tǒng)測(cè)試</b></p><p><b> 2調(diào)試分析</b></p><p> 程序的調(diào)試過(guò)程會(huì)發(fā)現(xiàn)很多設(shè)計(jì)程序過(guò)程中的漏洞,也會(huì)有很多bug出現(xiàn),需要仔細(xì)的不斷調(diào)試才能盡量的把程序調(diào)試的完美,我的程序調(diào)試的過(guò)程中出現(xiàn)的問(wèn)題較多,現(xiàn)列舉幾個(gè)比較有代表性的,希望供其他人參考</
13、p><p> 我最初想到的是設(shè)計(jì)出一個(gè)不依靠讀取系統(tǒng)時(shí)間就能獨(dú)立運(yùn)行的時(shí)鐘,但是,個(gè)人能力實(shí)在有限,設(shè)計(jì)了一段時(shí)間還是沒(méi)有頭緒,只能投機(jī)取巧的讀取系統(tǒng)時(shí)間代替了,這樣的話一些個(gè)性話的功能就不能夠?qū)崿F(xiàn)了,像把一分鐘設(shè)置成120秒,每小時(shí)30分鐘等</p><p> 目前的程序雖然能正常運(yùn)行,但是,對(duì)于一些錯(cuò)誤是不能反映出來(lái)的,像輸入鬧鐘時(shí)間,如果輸入的范圍不對(duì)的話也不能給出提示</p&
14、gt;<p> 鬧鐘的時(shí)間輸入因?yàn)闆](méi)有秒的限制,如果是當(dāng)前時(shí)間的話,目前的程序會(huì)直接報(bào)時(shí),應(yīng)該可以改成當(dāng)前時(shí)間不報(bào)時(shí)的</p><p><b> 五、用戶手冊(cè)</b></p><p> 1、windows系統(tǒng) vc++6.0設(shè)計(jì)</p><p> 2、本程序不需要安裝使用,直接運(yùn)行即可彈出時(shí)鐘對(duì)話框</p>
15、<p><b> 3、</b></p><p> 圖1 時(shí)鐘主界面圖2 程序功能界面</p><p> 進(jìn)入程序后會(huì)彈出圖1界面顯示系統(tǒng)時(shí)間,點(diǎn)擊設(shè)置按鈕可以出現(xiàn)圖2功能列表</p><p> 圖3 鬧鐘時(shí)間設(shè)置界面 圖4 倒計(jì)時(shí)時(shí)間設(shè)置界面</p><p> 打開(kāi)功能
16、列表可以選擇各個(gè)功能,圖3為選擇鬧鐘功能彈出的對(duì)話框,圖4為選擇倒計(jì)時(shí)功能彈出的對(duì)話框</p><p> 圖5 表盤(pán)及指針顏色設(shè)置界面</p><p> 選擇設(shè)置表盤(pán)或者各指針顏色時(shí)都會(huì)彈出圖5,選擇喜歡的顏色點(diǎn)擊確定后即可改變顏色</p><p><b> 六、程序清單</b></p><p> ?。?): /
17、/視圖類(lèi)的構(gòu)造函數(shù)</p><p> CShejiView::CShejiView()</p><p><b> {</b></p><p> // TODO: add construction code here</p><p> CBitmap bmp;//定義一個(gè)位圖類(lèi)型的變量。</p>&l
18、t;p> bmp.LoadBitmap(IDB_BITMAP1); ///加載位圖</p><p> m_brushBackground.CreatePatternBrush(&bmp);///創(chuàng)建位圖畫(huà)刷。</p><p> CTime curtime = CTime::GetCurrentTime();//同步系統(tǒng)時(shí)間。</p><p>
19、 m_hour = curtime.GetHour();</p><p> m_minute = curtime.GetMinute();</p><p> m_second = curtime.GetSecond();</p><p> flag=0;//時(shí)鐘正常工作狀態(tài)</p><p> flag2=1;//倒計(jì)時(shí)無(wú)效;</
20、p><p><b> hour=-1;</b></p><p> minute=-1;</p><p><b> set=0;</b></p><p><b> }</b></p><p> ?。?)//ondraw()函數(shù)進(jìn)行繪制</p>
21、;<p> void CShejiView::OnDraw(CDC* pDC)</p><p><b> {</b></p><p> CShejiDoc* pDoc = GetDocument();</p><p> ASSERT_VALID(pDoc);</p><p> // TODO: a
22、dd draw code for native data here</p><p> CRect rect;</p><p> GetClientRect(rect);///取得客戶區(qū)域</p><p> pDC->FillRect(rect,&m_brushBackground); ///用背景畫(huà)刷填充區(qū)域,而我們?cè)趍brushbackgrou
23、nd里加載了位圖,所以理所當(dāng)然就變成了我們?cè)O(shè)置的圖片</p><p> //畫(huà)表盤(pán),標(biāo)注刻度</p><p> CRect client;</p><p> GetClientRect(&client);</p><p> int centerX = client.Width()/2;</p><p>
24、 int centerY = client.Height()/2;</p><p> int clockRadius = centerX > centerY ? centerY : centerX;//用較小的一個(gè)作為鐘表的半徑,避免半徑太大矩形放不開(kāi)</p><p> clockRadius = clockRadius * 0.9;</p><p>
25、 int keduDRadius = clockRadius * 0.85;</p><p> int keduXRadius = clockRadius * 0.95;</p><p> int hourRadius = clockRadius * 0.3;//時(shí)針半徑</p><p> int minuteRadius = clockRadius * 0.
26、5;//分針半徑</p><p> int secondRadius = clockRadius * 0.7;//秒針半徑</p><p> //CPen clockPen(PS_SOLID, 2, RGB(0,0,255));</p><p> CPen clockPen(PS_SOLID, 2, bpcolor);//配合下面的執(zhí)行代碼,使用自己定義的畫(huà)筆
27、來(lái)設(shè)置表盤(pán)的顏色</p><p> CPen * oldPen = pDC->SelectObject(&clockPen);//恢復(fù)到原來(lái)的畫(huà)筆</p><p><b> //標(biāo)注刻度</b></p><p> for(int i = 0; i< 12; i++)</p><p><b&
28、gt; {</b></p><p> pDC->MoveTo(centerX + keduDRadius * cos(i * 30 * PI / 180),</p><p> centerY + keduDRadius * sin(i * 30 * PI / 180));</p><p> pDC->LineTo(centerX
29、+ clockRadius * cos(i * 30 * PI / 180),</p><p> centerY + clockRadius * sin(i * 30 * PI / 180));</p><p><b> }</b></p><p> for(int j = 0; j< 60; j++)</p>&
30、lt;p><b> {</b></p><p> pDC->MoveTo(centerX + keduXRadius * cos(j * 6 * PI / 180),//keduxradius是0.95,更加接近圓周,所以比起時(shí)針當(dāng)然理所當(dāng)然的更短</p><p> centerY + keduXRadius * sin(j * 6 * PI /
31、 180));</p><p> pDC->LineTo(centerX + clockRadius * cos(j * 6 * PI / 180),</p><p> centerY + clockRadius * sin(j * 6 * PI / 180));</p><p><b> }</b></p>&l
32、t;p> pDC->SelectObject(oldPen);</p><p> //調(diào)節(jié)時(shí),分,秒針角度顯示的關(guān)系</p><p> double secondRadians = m_second * 2 * PI / 60;//一個(gè)圓周是2pi,共有60秒,所以一秒是左邊這個(gè)表達(dá)式,用的是弧度值</p><p> double mi
33、nuteRadians = m_minute * 2 * PI / 60 + secondRadians / 60;//秒針每動(dòng)一格,其效果等同于分針動(dòng)1/60格</p><p> double hourRadians = m_hour * 2 * PI / 12 + minuteRadians*5 / 60; </p><p> //依照所計(jì)算的角度畫(huà)出時(shí),分,秒針</p>
34、;<p> //CPen secondPen(PS_SOLID, 2, RGB(0,255,0));</p><p> CPen secondPen(PS_SOLID,2,secondcolor);</p><p> oldPen = pDC->SelectObject(&secondPen);</p><p> pDC->
35、MoveTo(centerX , centerY);//時(shí)針的起點(diǎn)在中心</p><p> pDC->LineTo(centerX + double(secondRadius) * sin(secondRadians),</p><p> centerY - double(secondRadius) * cos(secondRadians));</p><p&
36、gt; pDC->SelectObject(oldPen);</p><p> //CPen minutePen(PS_SOLID, 4, RGB(255,255,0));</p><p> CPen minutePen(PS_SOLID, 4, minutecolor);</p><p> oldPen = pDC->SelectObject(
37、&minutePen);</p><p> pDC->MoveTo(centerX , centerY);</p><p> pDC->LineTo(centerX + double(minuteRadius) * sin(minuteRadians),</p><p> centerY - double(minuteRadius) * c
38、os(minuteRadians));</p><p> pDC->SelectObject(oldPen);</p><p> //CPen hourPen(PS_SOLID, 8, RGB(255,0,255));</p><p> CPen hourPen(PS_SOLID,8,hourcolor);</p><p> o
39、ldPen = pDC->SelectObject(&hourPen);</p><p> pDC->MoveTo(centerX , centerY);</p><p> pDC->LineTo(centerX + double(hourRadius) * sin(hourRadians),</p><p> centerY - d
40、ouble(hourRadius) * cos(hourRadians));</p><p> pDC->SelectObject(oldPen);</p><p><b> //畫(huà)表盤(pán)中心</b></p><p> CBrush abrush(RGB(255,0,0));</p><p> CBrush
41、* oldbrush = pDC->SelectObject(&abrush);</p><p> pDC->Ellipse(centerX - 8, centerY - 8 , centerX +8, centerY +8);//最左是圓心減8,最右是圓心加8</p><p> pDC->SelectObject(oldbrush);</p>
42、<p> //定義數(shù)字時(shí)鐘的位置,顯示當(dāng)前時(shí)間</p><p> CRect dianzibiao(centerX-52,centerY*6/15, centerX+52,centerY);</p><p> CString shijian;</p><p> char temp1[3], temp2[3], temp3[3];</p>
43、<p> itoa(m_hour, temp1, 10);</p><p> itoa(m_minute, temp2, 10);//ITOA功能,把一整書(shū)轉(zhuǎn)換為字符串,10進(jìn)制</p><p> itoa(m_second, temp3, 10);</p><p> shijian.Insert(0, temp1);//temp1用來(lái)保存小時(shí)
44、,temp2用來(lái)保存分鐘,temp3用來(lái)保存秒</p><p> shijian += ":";//時(shí)和分之間的帽號(hào)</p><p> if(m_minute < 10)</p><p><b> {</b></p><p> shijian += "0";//如果分
45、鐘小于10,則在前面加上字符“0”,以用來(lái)顯示 “07”、“08”之類(lèi)的形式</p><p><b> }</b></p><p> shijian += temp2;</p><p> shijian += ":";</p><p> if(m_second < 10)</p&g
46、t;<p><b> {</b></p><p> shijian += "0";//同理</p><p><b> }</b></p><p> shijian += temp3;</p><p> //完成數(shù)字時(shí)鐘顯示當(dāng)前時(shí)間</p>&
47、lt;p> pDC->SetBkMode (TRANSPARENT);</p><p> pDC->SetTextColor(RGB(255,0,0)); </p><p> pDC->DrawText(shijian,&dianzibiao,DT_CENTER);//dianzibiao是一個(gè)矩形,shijian是我們轉(zhuǎn)換后的cstring類(lèi)型<
48、;/p><p> //設(shè)置文本的字體大小,顏色</p><p> CString b("指針式時(shí)鐘--陳慶敬");</p><p> CFont abc;</p><p> abc.CreateFont(15, // nHeight</p><p>
49、 0, // nWidth</p><p> 0, // nEscapement</p><p> 0, // nOrientation</p><p> FW_ULTRABOLD, /
50、/ nWeight</p><p> FALSE, // bItalic</p><p> FALSE, // bUnderline</p><p> 0, // cStrikeOut</p><p> AN
51、SI_CHARSET, // nCharSet</p><p> OUT_DEFAULT_PRECIS, // nOutPrecision</p><p> CLIP_DEFAULT_PRECIS, // nClipPrecision</p><p> DEFAULT_QUALITY, /
52、/ nQuality</p><p> DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily</p><p> b); // lpszFacename</p><p> CFont * oldFont = pDC->SelectObject(&abc);</p>
53、<p> pDC->SetTextColor(RGB(255,0,0));</p><p> CRect rectText1(centerX-52,centerY*3/2, centerX+52,centerY*2);</p><p> pDC->DrawText(b, &rectText1, DT_CENTER);</p><p&g
54、t; CString c("12");</p><p> CRect rectText2(centerX-8,centerY-keduDRadius*10/9+10, centerX+8,centerY-(keduDRadius*10/9-14)+10);</p><p> pDC->SetTextColor(RGB(255,0,0)); </p>
55、;<p> pDC->DrawText(c, &rectText2, DT_CENTER);</p><p> CString d("6");</p><p> CRect rectText3(centerX-5,centerY+(keduDRadius*10/9-14-10), centerX+5,centerY+keduDRadiu
56、s*10/9-10);</p><p> pDC->DrawText(d, &rectText3, DT_CENTER);</p><p> CString e("9");</p><p> CRect rectText4(centerX-(keduDRadius*10/9-14)+10,centerY-7, centerX-
57、keduDRadius*10/9+10,centerY+7);</p><p> pDC->DrawText(e, &rectText4, DT_CENTER);</p><p> CString f("3");</p><p> CRect rectText5(centerX+(keduDRadius*10/9-14)-10
58、,centerY-7, centerX+keduDRadius*10/9-10,centerY+7);</p><p> pDC->DrawText(f, &rectText5, DT_CENTER);</p><p> pDC->SelectObject(oldFont);</p><p> //若定時(shí)時(shí)間到則提醒“時(shí)間到”</p&
59、gt;<p> if((m_hour==hour)&&(m_minute==minute)&&(set==0))</p><p><b> {</b></p><p> PlaySound((LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE | SND_A
60、SYNC);//播放插入的格式為wav的音樂(lè)文件</p><p><b> set=1;</b></p><p> //這個(gè)函數(shù)使你能夠獲得當(dāng)前應(yīng)用程序的實(shí)例句柄。AfxGetInstanceHandle總是//返回代表你的可執(zhí)行文件(.EXE)的HINSTANCE值,除非它從與MFC的USRDLL</p><p> //版本連接的DLL
61、內(nèi)調(diào)用的。在這種情況下,它返回的是DLL的HINSTANCE值。</p><p><b> }</b></p><p> //如果要求時(shí)鐘暫停,則不調(diào)用OnTimer函數(shù)</p><p> if(flag&&flag2)</p><p><b> return;</b><
62、;/p><p> //調(diào)用OnTimer函數(shù)</p><p> SetTimer(1,1000,NULL);//每1000毫秒產(chǎn)生一個(gè)消息,在ontimer函數(shù)里編輯相應(yīng)的//響應(yīng)代碼</p><p><b> }</b></p><p> (3): //工作狀態(tài)設(shè)定</p><p> vo
63、id CShejiView::OnBegin() //開(kāi)始運(yùn)行</p><p><b> {</b></p><p> // TODO: Add your command handler code here</p><p> flag=0;//0為正常,表示時(shí)鐘正常運(yùn)行</p><p> flag2=1;//1為
64、不正常,表示此時(shí)倒計(jì)時(shí)不工作</p><p> Invalidate();</p><p><b> }</b></p><p> void CShejiView::OnPause() //暫停運(yùn)行</p><p><b> {</b></p><p> // TO
65、DO: Add your command handler code here</p><p><b> flag=1;</b></p><p><b> flag2=1;</b></p><p> KillTimer(1);//KillTimer:移除定時(shí)器函數(shù)的聲明:移除先前用SetTimer設(shè)置的定時(shí)器。在定時(shí)器
66、使用完畢后移除定時(shí)器時(shí)使用</p><p> Invalidate();</p><p><b> }</b></p><p> void CShejiView::OnSetback() //倒計(jì)時(shí)功能</p><p><b> {</b></p><p> //
67、TODO: Add your command handler code here</p><p> Csetback dia;</p><p> if(dia.DoModal()==IDOK)//如果點(diǎn)擊"確認(rèn)“(IDOK)之后,用輸入的時(shí)間來(lái)代替系統(tǒng)本來(lái)的時(shí)間</p><p><b> {</b></p><
68、;p> m_hour=dia.m_hour;</p><p> m_minute=dia.m_minute;</p><p> m_second=dia.m_second;</p><p><b> flag2=0;</b></p><p><b> }</b></p>
69、<p><b> flag=1;</b></p><p> Invalidate();//InvalidateRect只是增加重繪區(qū)域,在下次WM_PAINT的時(shí)候才生效//InvalidateRect函數(shù)中的參數(shù)TRUE表示系統(tǒng)會(huì)在你畫(huà)之前用背景色將所選區(qū)域覆蓋一//次,默認(rèn)背景色為白色,可以通過(guò)設(shè)置BRUSH來(lái)改變背景色。</p><p><
70、b> }</b></p><p> void CShejiView::OnSettimer() //鬧鐘功能</p><p><b> {</b></p><p> // TODO: Add your command handler code here</p><p> Cmydialog m
71、d;</p><p> md.m_shour=hour;</p><p> md.m_sminute=minute;</p><p> UpdateData(false);</p><p> if(md.DoModal()==IDOK)//如果Updatedata(TRUE),將控件的值賦值給成員變</p><p&
72、gt; //量;Updatedata(FALSE),將成員變量的值賦值給控件;</p><p><b> {</b></p><p> UpdateData(true);</p><p> hour=md.m_shour;</p><p> minute=md.m_sminute;</p>&l
73、t;p><b> set=0;</b></p><p><b> }</b></p><p><b> }</b></p><p> (4)://對(duì)時(shí)鐘消息進(jìn)行響應(yīng)</p><p> void CShejiView::OnTimer(UINT nIDEvent)
74、 //OnTimer()函數(shù)是響應(yīng)用SetTimer()函數(shù)設(shè)///定的時(shí)鐘發(fā)送的時(shí)鐘消息的。</p><p> //為類(lèi)添加WM_TIMER消息響應(yīng),會(huì)看到類(lèi)中多了個(gè)OnTimer(UINT nIDEvent)。 </p><p> //然后用SetTimer(1,1000,NULL)就行了。第一個(gè)參數(shù)是ID,第二個(gè)是間隔時(shí)間,單位</p><p> //是
75、毫秒,第3個(gè)是響應(yīng)函數(shù),因?yàn)橐贠nTimer(UINT nIDEvent)里面做響應(yīng)操作,所//以此處給個(gè)NULL就行了。</p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call default</p><p> //若為時(shí)鐘
76、狀態(tài)則獲取系統(tǒng)當(dāng)前時(shí)間</p><p> if(flag==0)</p><p><b> {</b></p><p> CTime curtime = CTime::GetCurrentTime();</p><p> m_hour = curtime.GetHour();</p><p&g
77、t; m_minute = curtime.GetMinute();</p><p> m_second = curtime.GetSecond();</p><p><b> }</b></p><p> //若為倒計(jì)時(shí)狀態(tài)則判斷是否倒計(jì)時(shí)結(jié)束</p><p> if(flag2==0) </p>
78、<p><b> {</b></p><p> if(m_second||m_minute||m_hour)//如果時(shí)、分、秒不同時(shí)為零,則進(jìn)行倒計(jì)時(shí)</p><p><b> {</b></p><p> if(m_second==0)//如果在時(shí)分秒不同時(shí)為零的情況下,秒為零,那么秒向//分借6
79、0秒,如果此時(shí)分也恰好為零,則同時(shí)向時(shí)借60分,因?yàn)楸幻虢枞?0秒,所</p><p> //以分為59,hour減1</p><p> {m_second=60;</p><p> if(m_minute==0)</p><p><b> {</b></p><p> m_minut
80、e=59;</p><p><b> m_hour--;</b></p><p><b> }</b></p><p><b> else</b></p><p> m_minute--;</p><p><b> }</b&g
81、t;</p><p> m_second--;</p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><p> AfxMessageBox("倒計(jì)時(shí)時(shí)間到&q
82、uot;);</p><p><b> flag2=1;</b></p><p> KillTimer(1);</p><p><b> }</b></p><p><b> }</b></p><p> Invalidate();</p
83、><p> CView::OnTimer(nIDEvent);</p><p><b> }</b></p><p> ?。?)://設(shè)置表盤(pán)顏色</p><p> void CShejiView::OnBpcolor() </p><p><b> {</b></
84、p><p> // TODO: Add your command handler code here</p><p> CColorDialog ColorDlg; //創(chuàng)建調(diào)色板對(duì)象</p><p> ColorDlg.m_cc.Flags|=CC_FULLOPEN;</p><p> if(IDOK == ColorDlg.DoMod
85、al()) //將調(diào)色板實(shí)例化</p><p><b> {</b></p><p> bpcolor= ColorDlg.GetColor(); //獲取選中的顏色</p><p><b> }</b></p><p><b> }</b></p>&l
86、t;p> void CShejiView::OnHourcolor()//設(shè)置時(shí)針顏色 </p><p><b> {</b></p><p> // TODO: Add your command handler code here</p><p> CColorDialog ColorDlg; //創(chuàng)建調(diào)色板對(duì)象</p&g
87、t;<p> ColorDlg.m_cc.Flags|=CC_FULLOPEN;</p><p> if(IDOK == ColorDlg.DoModal()) //將調(diào)色板實(shí)例化</p><p><b> {</b></p><p> hourcolor= ColorDlg.GetColor(); //獲取選中的顏色&l
88、t;/p><p><b> }</b></p><p><b> }</b></p><p> void CShejiView::OnMinutecolor() //設(shè)置分針顏色</p><p><b> {</b></p><p> // TOD
89、O: Add your command handler code here</p><p> CColorDialog ColorDlg; //創(chuàng)建調(diào)色板對(duì)象</p><p> ColorDlg.m_cc.Flags|=CC_FULLOPEN;</p><p> if(IDOK == ColorDlg.DoModal()) //將調(diào)色板實(shí)例化</p>
90、;<p><b> {</b></p><p> minutecolor= ColorDlg.GetColor(); //獲取選中的顏色</p><p><b> }</b></p><p><b> }</b></p><p> void CSheji
91、View::OnSecondcolor() //設(shè)置秒針顏色</p><p><b> {</b></p><p> // TODO: Add your command handler code here</p><p> CColorDialog ColorDlg; //創(chuàng)建調(diào)色板對(duì)象</p><p> Col
92、orDlg.m_cc.Flags|=CC_FULLOPEN;</p><p> if(IDOK == ColorDlg.DoModal()) //將調(diào)色板實(shí)例化</p><p><b> {</b></p><p> secondcolor= ColorDlg.GetColor(); //獲取選中的顏色</p><p&
93、gt;<b> }</b></p><p><b> }</b></p><p><b> 七、體會(huì)與自我評(píng)價(jià)</b></p><p> 本次課程設(shè)計(jì)選擇的是指針式時(shí)鐘,主要是出于自己的興趣愛(ài)好。由于自己才疏學(xué)淺,開(kāi)始的表盤(pán)繪制就很是頭疼,但是通過(guò)查詢資料、請(qǐng)教別人以及自己的認(rèn)真思考,終于明白
94、了表盤(pán)及刻度繪制的原理??潭扔?jì)算起來(lái)并不是特別難,主要是一些幾何上的知識(shí)以及三角函數(shù)方面的內(nèi)容,但由于對(duì)MFC并不是很了解,因此在這個(gè)地方停留了很長(zhǎng)時(shí)間。不過(guò)有一些同學(xué)對(duì)MFC已經(jīng)有了不錯(cuò)的掌握,所以在他們的指導(dǎo)和幫助下對(duì)MFC有了一些了解。程序設(shè)計(jì)過(guò)程中最大的困難就是對(duì)于MFC中的函數(shù)了解不夠,不能融會(huì)貫通的拿來(lái)運(yùn)用,通過(guò)Google搜索引擎的查詢給自己提供了很大的幫助。通過(guò)此次課程設(shè)計(jì)使我深刻了解到了日常知識(shí)積累的重要性。書(shū)到用時(shí)方
95、恨少,在以后的學(xué)習(xí)中一定要吸取經(jīng)驗(yàn),學(xué)好基礎(chǔ)知識(shí)并努力開(kāi)闊視野。同時(shí)通過(guò)此次課程設(shè)計(jì),對(duì)于設(shè)計(jì)可視化窗口的程序有了更好的了解,也激發(fā)了自己對(duì)可視化窗口程序設(shè)計(jì)的興趣。而且通過(guò)這次課程設(shè)計(jì),使自己對(duì)課本上的東西有了更好的掌握,對(duì)課程內(nèi)容的了解更加深刻,受益匪淺。</p><p> 而且通過(guò)本次課程設(shè)計(jì)更加意識(shí)到提高編程能力關(guān)鍵是要多多實(shí)踐,讀書(shū)是為寫(xiě)代碼打基礎(chǔ),但只讀書(shū)不敲代碼是不可能提高實(shí)際的編程能力的。只有多
96、讀源碼、多寫(xiě)代碼、多思考才能對(duì)知識(shí)有更加深刻的了解。</p><p> 在編程期間,遇到了很多困難,老師提供了很多的指導(dǎo)和幫助。對(duì)老師表示由衷的感謝。</p><p><b> 八、參考文獻(xiàn):</b></p><p> [1]侯俊杰,《深入淺出 MFC (第 2 版)》.湖北:華中科技大學(xué)出版社, 2001.7</p>&l
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)--指針式時(shí)鐘
- 指針式時(shí)鐘設(shè)計(jì) 開(kāi)題報(bào)告
- c語(yǔ)言課程設(shè)計(jì)--指針式鬧鐘
- 基于tft-lcd的指針式時(shí)鐘設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)--基于tft-lcd的指針式時(shí)鐘設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---基于tft-lcd的指針式時(shí)鐘設(shè)計(jì)
- 微機(jī)原理課程設(shè)計(jì)---指針顯示時(shí)鐘
- 課程設(shè)計(jì)---指針式mf47萬(wàn)用表
- 信息工程學(xué)院課程設(shè)計(jì)--lcd顯示的指針式電子鐘
- 時(shí)鐘課程設(shè)計(jì)報(bào)告
- vb時(shí)鐘課程設(shè)計(jì)報(bào)告---模擬時(shí)鐘
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 指針式萬(wàn)用表安裝實(shí)習(xí)報(bào)告
- 基于圖像處理的指針式儀表識(shí)別設(shè)計(jì)
- 電子數(shù)字時(shí)鐘課程設(shè)計(jì)報(bào)告
- 電子時(shí)鐘課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論