版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> VC++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告</p><p> 題目:基于MFC的模擬時(shí)鐘</p><p><b> 課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告</b></p><p> 1、題目:基于MFC的模擬時(shí)鐘</p><p><b> 2、編程要點(diǎn):</b></p><p> 制
2、作時(shí)鐘的過程中,首先給時(shí)鐘創(chuàng)建一個(gè)基類CClockElement,還需要派生類CClockBackground,CClockHourHand,CClockMinHand,CClockSecHand分別控制時(shí)鐘的背景,時(shí)鐘的時(shí)針,分針,秒針。</p><p><b> 3、實(shí)現(xiàn)過程:</b></p><p> 工程、風(fēng)格、控件與變量表</p><
3、p> 本時(shí)鐘是基本對(duì)話框的時(shí)鐘,界面簡約,便于使用。</p><p><b> 控件</b></p><p><b> 變量表</b></p><p><b> 主要功能程序代碼</b></p><p> CClockBackground::CClockBack
4、ground()</p><p><b> {</b></p><p> //為時(shí)鐘背景定義默認(rèn)的顏色設(shè)置</p><p> m_crMain=RGB(0,0,255);</p><p> m_crOther=RGB(0,255,0);</p><p><b> }</b
5、></p><p> void CClockBackground::Draw(CDC *pDC)</p><p><b> {</b></p><p><b> //設(shè)置準(zhǔn)備環(huán)境</b></p><p> CPen penMain(PS_SOLID,1,m_crMain),penOth
6、er(PS_SOLID,1,m_crOther);</p><p> CBrush brMain(m_crMain),brOther(m_crOther);</p><p> CPen *pOldPen=pDC->SelectObject(&penOther);</p><p> CBrush *pOldBrush=pDC->SelectO
7、bject(&brMain);</p><p> CPoint ptCenter=m_rcRegion.CenterPoint();</p><p> int nRadius=m_nRadius-8;</p><p> for(int i=0;i<60;i++)</p><p><b> {</b>
8、</p><p> CPoint ptEnd=ptCenter;</p><p> ptEnd.Offset((int)(nRadius*sin(2*PI*(i%60)/60)),(int)(-nRadius*cos(2*PI*(i%60)/60)));</p><p> CRect rcDot(-2,-2,2,2);</p><p>
9、 rcDot.OffsetRect(ptEnd);</p><p> pDC->Ellipse(rcDot);</p><p><b> }</b></p><p> //繪制12個(gè)小方框,表示12個(gè)正點(diǎn)</p><p> pDC->SelectObject(&penMain);</p
10、><p> pOldBrush=pDC->SelectObject(&brOther);</p><p> for(i=0;i<12;i++)</p><p><b> {</b></p><p> CPoint ptEnd=ptCenter;</p><p> doub
11、le fRadian=2*PI*(i%12)/12;</p><p> ptEnd.Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));</p><p> CRect rcDot(-3,-3,3,3);</p><p> rcDot.OffsetRect(ptEnd);</p&
12、gt;<p> pDC->Rectangle(rcDot);</p><p><b> }</b></p><p> //huanyuan設(shè)備環(huán)境</p><p> pDC->SelectObject(pOldPen);</p><p> pDC->SelectObject(pO
13、ldBrush);</p><p><b> }</b></p><p> CClockHourHand::CClockHourHand()</p><p><b> {</b></p><p><b> //定義默認(rèn)顏色</b></p><p>
14、; m_crMain=RGB(0,0,128);</p><p> m_crOther=RGB(128,128,0);</p><p><b> }</b></p><p> void CClockHourHand::Draw(CDC *pDC)</p><p><b> {</b><
15、;/p><p><b> //設(shè)置準(zhǔn)備環(huán)境</b></p><p> CPen penMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);</p><p> CBrush brMain(m_crMain),brOther(m_crOther);</p><p&g
16、t; CPen *pOldPen=pDC->SelectObject(&penOther);</p><p> CBrush *pOldBrush=pDC->SelectObject(&brMain);</p><p> //確定當(dāng)前指針的弧度</p><p> int nTime=(m_tmCur.GetHour()%12)*3
17、600;</p><p> nTime+=m_tmCur.GetMinute()*60;</p><p> nTime+=m_tmCur.GetSecond();</p><p> double fRadian=2*PI*nTime/3600/12;</p><p> //確定繪制菱形指針?biāo)璧乃膫€(gè)角的坐標(biāo)</p>&l
18、t;p> CPoint ptDiamond[4];</p><p> for(int i=0;i<4;i++)</p><p><b> {</b></p><p> ptDiamond[i]=m_rcRegion.CenterPoint();</p><p><b> }</b&g
19、t;</p><p> int nRadius=m_nRadius/2;</p><p> ptDiamond[0].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));</p><p> fRadian+=0.5*PI;</p><p> nRadius=
20、m_nRadius/20;</p><p> ptDiamond[1].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));</p><p> fRadian+=0.5*PI;</p><p> nRadius=m_nRadius/10;</p><p>
21、ptDiamond[2].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));</p><p> fRadian+=0.5*PI;</p><p> nRadius=m_nRadius/20;</p><p> ptDiamond[3].Offset((int)(nRadius*si
22、n(fRadian)),(int)(-nRadius*cos(fRadian)));</p><p><b> //繪制菱形時(shí)鐘</b></p><p> pDC->Polygon(ptDiamond,4);</p><p> //huanyuan設(shè)備環(huán)境</p><p> pDC->SelectOb
23、ject(pOldPen);</p><p> pDC->SelectObject(pOldBrush);</p><p><b> }</b></p><p> CClockMinHand::CClockMinHand()</p><p><b> {</b></p>
24、<p><b> //定義默認(rèn)顏色</b></p><p> m_crMain=RGB(0,255,100);</p><p> m_crOther=RGB(128,128,0);</p><p><b> }</b></p><p> void CClockMinHand::D
25、raw(CDC *pDC)</p><p><b> {</b></p><p><b> //設(shè)置準(zhǔn)備環(huán)境</b></p><p> CPen penMain(PS_SOLID,1,m_crMain),penOther(PS_SOLID,1,m_crOther);</p><p> CBr
26、ush brMain(m_crMain),brOther(m_crOther);</p><p> CPen *pOldPen=pDC->SelectObject(&penOther);</p><p> CBrush *pOldBrush=pDC->SelectObject(&brMain);</p><p> //確定分針?biāo)谖?/p>
27、置的弧度</p><p> int nTime=m_tmCur.GetMinute()*60;</p><p> nTime+=m_tmCur.GetSecond();</p><p> double fRadian=2*PI*nTime/3600;</p><p> //確定繪制菱形指針?biāo)璧乃膫€(gè)角的坐標(biāo)</p>&l
28、t;p> CPoint ptDiamond[4];</p><p> for(int i=0;i<4;i++)</p><p><b> {</b></p><p> ptDiamond[i]=m_rcRegion.CenterPoint();</p><p><b> }</b&g
29、t;</p><p> int nRadius=m_nRadius/4;</p><p> ptDiamond[0].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));</p><p> fRadian+=0.5*PI;</p><p> nRadius=
30、m_nRadius/20;</p><p> ptDiamond[1].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));</p><p> fRadian+=0.5*PI;</p><p> nRadius=m_nRadius/10;</p><p>
31、ptDiamond[2].Offset((int)(nRadius*sin(fRadian)),(int)(-nRadius*cos(fRadian)));</p><p> fRadian+=0.5*PI;</p><p> nRadius=m_nRadius/20;</p><p> ptDiamond[3].Offset((int)(nRadius*si
32、n(fRadian)),(int)(-nRadius*cos(fRadian)));</p><p><b> //繪制菱形時(shí)鐘</b></p><p> pDC->Polygon(ptDiamond,4);</p><p> //huanyuan設(shè)備環(huán)境</p><p> pDC->SelectOb
33、ject(pOldPen);</p><p> pDC->SelectObject(pOldBrush);</p><p><b> }</b></p><p> CClockSecHand::CClockSecHand()</p><p><b> {</b></p>
34、<p> //設(shè)定秒針的默認(rèn)顏色</p><p> m_crMain=RGB(0,200,200);</p><p> m_crOther=RGB(0,200,200);</p><p><b> }</b></p><p> void CClockSecHand::Draw(CDC *pDC)&l
35、t;/p><p><b> {</b></p><p> int nTime=m_tmCur.GetSecond();</p><p> CPoint ptStart=m_rcRegion.CenterPoint();</p><p> CPoint ptEnd=ptStart;</p><p&g
36、t; int nRadius=m_nRadius-10;</p><p> ptEnd.Offset((int)(nRadius*sin(2*PI*nTime/60)),(int)(-nRadius*cos(2*PI*nTime/60)));</p><p> CPen penMain(PS_SOLID,1,m_crMain);</p><p> CPen*
37、pOldPen=pDC->SelectObject(&penMain);</p><p> pDC->MoveTo(ptStart);</p><p> pDC->LineTo(ptEnd);</p><p> pDC->SelectObject(pOldPen);</p><p><b>
38、}</b></p><p> void CClockEX::OnTimer(UINT nIDEvent) </p><p><b> {</b></p><p> Invalidate(FALSE);</p><p> CStatic::OnTimer(nIDEvent);</p>&l
39、t;p><b> }</b></p><p> void CClockEX::OnSize(UINT nType, int cx, int cy) </p><p><b> {</b></p><p> CStatic::OnSize(nType, cx, cy);</p><p>
40、 GetClientRect(m_rcClient); //獲取當(dāng)前客戶區(qū)</p><p> m_clockBK.SetRegion(m_rcClient);</p><p> m_clockHour.SetRegion(m_rcClient);</p><p> m_clockMin.SetRegion(m_rcClient);</p>
41、<p> m_clockSec.SetRegion(m_rcClient);</p><p><b> }</b></p><p> void CClockEX::OnPaint() </p><p><b> {</b></p><p> CPaintDC dc(this);
42、// device context for painting</p><p> //實(shí)現(xiàn)雙緩沖繪圖---防止屏幕閃爍</p><p> CDC dcMem;</p><p> dcMem.CreateCompatibleDC(&dc);</p><p> CBitmap bmp;</p><p> b
43、mp.CreateCompatibleBitmap(&dc,m_rcClient.Width(),m_rcClient.Height());</p><p> dcMem.SelectObject(&bmp);</p><p> DrawClock(&dcMem); //繪制時(shí)鐘</p><p> dc.BitBlt(0,0,m_rcC
44、lient.Width(),m_rcClient.Height(),&dcMem,0,0,SRCCOPY);</p><p><b> }</b></p><p> void CClockEX::PreSubclassWindow() </p><p><b> {</b></p><p&
45、gt; GetClientRect(m_rcClient); //獲取當(dāng)前客戶區(qū)</p><p> m_clockBK.SetRegion(m_rcClient);</p><p> m_clockHour.SetRegion(m_rcClient);</p><p> m_clockMin.SetRegion(m_rcClient);</p>
46、;<p> m_clockSec.SetRegion(m_rcClient);</p><p> SetTimer(1,100,NULL);</p><p> CStatic::PreSubclassWindow();</p><p><b> }</b></p><p> void CClock
47、EX::DrawClock(CDC *pDC)</p><p><b> {</b></p><p> CTime tmCur=CTime::GetCurrentTime();</p><p> m_clockBK.SetTime(tmCur);</p><p> m_clockHour.SetTime(tmCu
48、r);</p><p> m_clockMin.SetTime(tmCur);</p><p> m_clockSec.SetTime(tmCur);</p><p> m_clockBK.Draw(pDC);</p><p> m_clockHour.Draw(pDC);</p><p> m_clockM
49、in.Draw(pDC);</p><p> m_clockSec.Draw(pDC);</p><p><b> }</b></p><p> CClockElement::CClockElement()</p><p><b> {</b></p><p> m
50、_nRadius=0;</p><p> m_crMain=RGB(255,0,0);</p><p> m_crOther=RGB(128,128,0);</p><p><b> }</b></p><p> void CClockElement::SetRegion(LPRECT lprcRect)<
51、/p><p><b> {</b></p><p> m_rcRegion=lprcRect;</p><p> m_nRadius=m_rcRegion.Width()/2;</p><p> if(m_rcRegion.Width()>m_rcRegion.Height())</p><
52、p><b> {</b></p><p> m_nRadius=m_rcRegion.Height()/2; </p><p><b> }</b></p><p><b> }</b></p><p> void CClockElement::SetTime
53、(const CTime &tmCur)</p><p><b> {</b></p><p> m_tmCur=tmCur;</p><p><b> }</b></p><p> void CClockElement::SetColor(COLORREF crMain,COLOR
54、REF crOther)</p><p><b> {</b></p><p> m_crMain=crMain;</p><p> m_crOther=crOther;</p><p><b> }</b></p><p><b> 4、運(yùn)行效果展示:&
55、lt;/b></p><p><b> 5、自我總結(jié):</b></p><p> 該小程序是基于MFC中的對(duì)話框的,主要針對(duì)畫筆和畫刷的用法,沒有涉及連接數(shù)據(jù)庫和算法,完全是為了本學(xué)期所學(xué)知識(shí)的運(yùn)用,由于時(shí)間緊,所以沒能深入的探索MFC的奧妙,不過通過本次設(shè)計(jì),我對(duì)老師課堂上所講述的關(guān)于該類型的知識(shí),有了進(jìn)一步的了解和掌握,初步的熟悉了畫筆和畫刷的簡單用法,
56、還鞏固了MFC類中的基本操作,例如,添加新類,新變量,創(chuàng)建新的對(duì)話框,添加控件等方面的知識(shí)。程序設(shè)計(jì)過程中最大的困難就是對(duì)于MFC中的函數(shù)了解不夠,不能融會(huì)貫通的拿來運(yùn)用,通過百度搜索引擎的查詢給自己提供了很大的幫助。通過此次課程設(shè)計(jì)使我深刻了解到了日常知識(shí)積累的重要性。同時(shí)通過此次課程設(shè)計(jì),對(duì)于設(shè)計(jì)可視化窗口的程序有了更好的了解,也激發(fā)了自己對(duì)可視化窗口程序設(shè)計(jì)的興趣。而且通過這次課程設(shè)計(jì),使自己對(duì)課本上的東西有了更好的掌握,對(duì)課程內(nèi)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- mfc課程設(shè)計(jì)———利用vc++程序編寫掃雷游戲
- vc++課程設(shè)計(jì)報(bào)告
- vc++軟件課程設(shè)計(jì)報(bào)告
- vc++庫函數(shù)課程設(shè)計(jì)
- vc++課程設(shè)計(jì)報(bào)告----對(duì)抗游戲
- vc++課程設(shè)計(jì)-- 餐飲管理系統(tǒng)
- vc++課程設(shè)計(jì)--工資管理
- vc++課程設(shè)計(jì)報(bào)告--對(duì)抗游戲
- vc++網(wǎng)絡(luò)聊天軟件課程設(shè)計(jì)
- vc++課程設(shè)計(jì)--工資管理
- vc++課設(shè)課程設(shè)計(jì)報(bào)告
- vc++課程設(shè)計(jì)報(bào)告---球員管理系統(tǒng)
- VC++課程設(shè)計(jì)--工資管理.doc
- vc++課程設(shè)計(jì)---gpa計(jì)算器的設(shè)計(jì)
- vc++課程設(shè)計(jì)---簡單計(jì)算器的設(shè)計(jì)
- vc++課程設(shè)計(jì)----用winsock實(shí)現(xiàn)聊天
- vc++課程設(shè)計(jì)《算術(shù)表達(dá)式》
- 同學(xué)錄系統(tǒng)vc++課程設(shè)計(jì)
- vc++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告---對(duì)抗游戲
- vc++課程設(shè)計(jì)報(bào)告---橫向繪制余弦曲線
評(píng)論
0/150
提交評(píng)論