版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> XX大學(xué)</b></p><p><b> 課程設(shè)計說明書</b></p><p> 學(xué)生姓名: </p><p> 學(xué) 號:
2、 </p><p> 學(xué) 院: </p><p> 專 業(yè): </p><p> 題 目: 指針式時鐘 </p&g
3、t;<p> 指導(dǎo)教師: 職稱: </p><p> 2013 年 1 月 11 日</p><p><b> XX大學(xué)</b></p><p><b> 課程設(shè)計任務(wù)書</b></p><p> 12/1
4、3 學(xué)年第 一 學(xué)期</p><p> 學(xué) 院: </p><p> 專 業(yè): </p><p> 學(xué) 生 姓 名:
5、 </p><p> 學(xué) 號: </p><p> 題 目: 指針式時鐘 </p><p> 起 迄 日 期:
6、 </p><p> 課程設(shè)計地點: </p><p> 指 導(dǎo) 教 師: </p><p> 系 主 任: <
7、;/p><p> 下達任務(wù)書日期: 2012年12月24日</p><p> 課 程 設(shè) 計 任 務(wù) 書</p><p> 課 程 設(shè) 計 任 務(wù) 書</p><p><b> 目錄</b></p><p> 摘要……………………………………………………………….1</p&g
8、t;<p> 關(guān)鍵詞…………………………………………………………….2</p><p> 設(shè)計目的、意義.......................................3</p><p> 設(shè)計內(nèi)容.............................................4</p><p> 結(jié)果分析.......
9、......................................5</p><p> 設(shè)計心得.............................................6</p><p> 參考文獻.............................................7</p><p> 運行結(jié)果........
10、.....................................8</p><p><b> 摘要:</b></p><p> 計時器是程序中最常用的后臺任務(wù)機制之一,其時間間隔最低約55毫秒,被廣泛用于時鐘、磁盤備份程序或需要在某一時刻運行的程序等。而模擬時鐘是一種集計時器和時鐘顯示于一體的程序。以實例為背景學(xué)習(xí)基于MFC的WINDOWS應(yīng)用程序設(shè)計
11、,編寫一個指針式時鐘程序,此程序在屏幕正中有一個指針式鐘面。指針式的時鐘表盤為橢圓形或圓形,并且圓周上有分布均勻的12個刻度,刻度要求顯示清晰,鐘面上有長度和顏色及粗細(xì)各不相同的指針,即時針、分針、秒針,以便各個指針重合時亦可以輕易辨認(rèn),指針的運動要求具有規(guī)律性,且為順時針。</p><p><b> 關(guān)鍵詞:指針式時鐘</b></p><p><b>
12、 設(shè)計目的、意義:</b></p><p> 綜合應(yīng)用VC++的各種編程知識和技巧進行程序設(shè)計的能力,最終掌握面向?qū)ο蟮木幊碳夹g(shù)。通過本次課程設(shè)計,培養(yǎng)自主學(xué)習(xí)和獨立創(chuàng)新能力。</p><p><b> 設(shè)計內(nèi)容:(正文)</b></p><p> void CMy2View::OnDraw(CDC* pDC)</p&g
13、t;<p><b> {</b></p><p> CMy2Doc* pDoc = GetDocument();</p><p> ASSERT_VALID(pDoc);</p><p> // TODO: add draw code for native data here</p><p> R
14、ECT Rect;</p><p> GetClientRect(&Rect);//計算橢圓中心位置</p><p> int CenterX=Rect.right/2;</p><p> int CenterY=Rect.bottom/2;</p><p> CTime Time=CTime::GetCurrentTime(
15、);</p><p> CString str;</p><p> int i,x,y;</p><p> CSize size;//創(chuàng)建一支畫筆,用來畫橢圓</p><p> CPen Pen(PS_SOLID,5,RGB(0,0,0));//設(shè)置當(dāng)前畫筆,并記下以前的現(xiàn)筆</p><p> CPen *O
16、ldPen=pDC->SelectObject(&Pen);//繪制鐘面橢圓</p><p> pDC->Ellipse(5,5,Rect.right-5,Rect.bottom-5);</p><p> double Radians;//設(shè)置字體</p><p> pDC->SetTextColor(RGB(255,0,0));&l
17、t;/p><p> for(i=1;i<=12;i++)</p><p><b> {</b></p><p> str.Format("%d",i);</p><p> size=pDC->GetTextExtent(str,str.GetLength());</p>
18、<p> Radians=(double)i*6.28/12.0;//計算鐘點放置的位置</p><p> x=CenterX-(size.cx/2)+(int)((double)(CenterX-20)*sin(Radians));</p><p> y=CenterY-(size.cy/2)-(int)((double)(CenterY-20)*cos(Radians)
19、);</p><p><b> //繪制鐘點</b></p><p> pDC->TextOut(x,y,str);</p><p><b> }</b></p><p> //計算時鐘指針的夾角</p><p> Radians=(double)Time.G
20、etHour()+(double)Time.GetMinute()/60.0+(double)Time.GetSecond()/3600.0;</p><p> Radians*=6.28/12.0;</p><p> //創(chuàng)建時鐘指針畫筆</p><p> CPen HourPen(PS_SOLID,5,RGB(100,200,100));</p>
21、;<p> pDC->SelectObject(&HourPen);</p><p><b> //繪制時鐘指針</b></p><p> pDC->MoveTo(CenterX,CenterY);</p><p> pDC->LineTo(CenterX+(int)((double)(Cente
22、rX/3)*sin(Radians)),CenterY-(int)((double)(CenterY/3)*cos(Radians)));</p><p> Radians=(double)Time.GetMinute()+(double)Time.GetSecond()/60.0;</p><p> Radians*=6.28/60.0;</p><p>
23、//創(chuàng)建分鐘指針畫筆</p><p> CPen MinutePen(PS_SOLID,3,RGB(0,0,255));</p><p> pDC->SelectObject(&MinutePen);</p><p><b> //繪制分鐘指針</b></p><p> pDC->MoveTo
24、(CenterX,CenterY);</p><p> pDC->LineTo(CenterX+(int)((double)(CenterX*2)/3)*sin(Radians),CenterY-(int)((double)(CenterY*2/3)*cos(Radians)));</p><p> Radians=(double)Time.GetSecond();</p&
25、gt;<p> Radians*=6.28/60.0;</p><p> //創(chuàng)建秒鐘指針畫筆</p><p> CPen SecondPen(PS_SOLID,1,RGB(0,25,0));</p><p> pDC->SelectObject(&SecondPen);</p><p><b>
26、 //繪制秒鐘指針</b></p><p> pDC->MoveTo(CenterX,CenterY);</p><p> pDC->LineTo(CenterX+(int)((double)(CenterX*4)/5)*sin(Radians),CenterY-(int)((double)(CenterY*4)/5*cos(Radians)));</p
27、><p> pDC->SelectObject(OldPen);</p><p> // TODO: add draw code for native data here</p><p><b> }</b></p><p> void CMy2View::OnTimer(UINT nIDEvent) <
28、/p><p><b> {</b></p><p> // TODO: Add your message handler code here and/or call default</p><p> InvalidateRect(NULL,true);</p><p> UpdateWindow();</p&g
29、t;<p> CView::OnTimer(nIDEvent);</p><p><b> }</b></p><p> int CMy2View::OnCreate(LPCREATESTRUCT lpCreateStruct) </p><p><b> {</b></p><p
30、> if (CView::OnCreate(lpCreateStruct) == -1)</p><p> return -1;</p><p> // TODO: Add your specialized creation code here</p><p> SetTimer(1,1000,NULL);</p><p>&l
31、t;b> return 0;</b></p><p><b> }</b></p><p><b> 結(jié)果分析:</b></p><p> 計時器消息不是和其他消息異步處理的,計時器不會中斷另一個非計時器消息。另外,計時器編程所設(shè)定的時間間隔并不是精確值,因為計時器所基于的硬件計時器每54.9秒“
32、滴答”一次,Windows將把計時值舍入到下一個55毫秒的倍數(shù)。</p><p><b> 設(shè)計心得:</b></p><p> 通過本次課程設(shè)計更加意識到提高編程能力關(guān)鍵是要多多實踐,讀書是為了代碼打基礎(chǔ),但只讀書不敲代碼是不可能提高實際的編程能力的。只有多讀源碼,多寫代碼,多思考才能對知識有更加深刻的了解。</p><p><b&
33、gt; 參考文獻:</b></p><p> Visual C++課程設(shè)計案例精編</p><p> 《Visual C++程序設(shè)計——基礎(chǔ)與實例分析》 ,朱晴婷,黃海鷹,陳蓮君,清華大學(xué)出版社。</p><p> 《Visual C++6.0開發(fā)技巧與實例教程》 ,同志工作室,人民郵電出版社。</p><p> 《Vi
34、sual C++6.0面向?qū)ο蟪绦蛟O(shè)計教程》 ,劉瑞新,機械工業(yè)出版社。</p><p><b> 運行結(jié)果:</b></p><p><b> 總程序</b></p><p> // 2View.cpp : implementation of the CMy2View class</p><p&
35、gt;<b> //</b></p><p> //#include "math.h"</p><p> #include "stdafx.h"</p><p> #include "2.h"</p><p> #include "2Doc.
36、h"</p><p> #include "2View.h"</p><p> #ifdef _DEBUG</p><p> #define new DEBUG_NEW</p><p> #undef THIS_FILE</p><p> static char THIS_FIL
37、E[] = __FILE__;</p><p><b> #endif</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMy2View</p><p>
38、IMPLEMENT_DYNCREATE(CMy2View, CView)</p><p> BEGIN_MESSAGE_MAP(CMy2View, CView)</p><p> //{{AFX_MSG_MAP(CMy2View)</p><p> ON_WM_TIMER()</p><p> ON_WM_CREATE()</p
39、><p> //}}AFX_MSG_MAP</p><p> // Standard printing commands</p><p> ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)</p><p> ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFil
40、ePrint)</p><p> ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)</p><p> END_MESSAGE_MAP()</p><p> ///////////////////////////////////////////////////////////////////
41、//////////</p><p> // CMy2View construction/destruction</p><p> CMy2View::CMy2View()</p><p><b> {</b></p><p> // TODO: add construction code here</p&
42、gt;<p><b> }</b></p><p> CMy2View::~CMy2View()</p><p><b> {</b></p><p><b> }</b></p><p> BOOL CMy2View::PreCreateWindow(
43、CREATESTRUCT& cs)</p><p><b> {</b></p><p> // TODO: Modify the Window class or styles here by modifying</p><p> // the CREATESTRUCT cs</p><p> retu
44、rn CView::PreCreateWindow(cs);</p><p><b> }</b></p><p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMy2View drawing</
45、p><p> void CMy2View::OnDraw(CDC* pDC)</p><p><b> {</b></p><p> CMy2Doc* pDoc = GetDocument();</p><p> ASSERT_VALID(pDoc);</p><p> // TODO: a
46、dd draw code for native data here</p><p> RECT Rect;</p><p> GetClientRect(&Rect);//計算橢圓中心位置</p><p> int CenterX=Rect.right/2;</p><p> int CenterY=Rect.bottom/2
47、;</p><p> CTime Time=CTime::GetCurrentTime();</p><p> CString str;</p><p> int i,x,y;</p><p> CSize size;//創(chuàng)建一支畫筆,用來畫橢圓</p><p> CPen Pen(PS_SOLID,5,RG
48、B(0,0,0));//設(shè)置當(dāng)前畫筆,并記下以前的現(xiàn)筆</p><p> CPen *OldPen=pDC->SelectObject(&Pen);//繪制鐘面橢圓</p><p> pDC->Ellipse(5,5,Rect.right-5,Rect.bottom-5);</p><p> double Radians;//設(shè)置字體<
49、;/p><p> pDC->SetTextColor(RGB(255,0,0));</p><p> for(i=1;i<=12;i++)</p><p><b> {</b></p><p> str.Format("%d",i);</p><p> siz
50、e=pDC->GetTextExtent(str,str.GetLength());</p><p> Radians=(double)i*6.28/12.0;//計算鐘點放置的位置</p><p> x=CenterX-(size.cx/2)+(int)((double)(CenterX-20)*sin(Radians));</p><p> y=Ce
51、nterY-(size.cy/2)-(int)((double)(CenterY-20)*cos(Radians));</p><p><b> //繪制鐘點</b></p><p> pDC->TextOut(x,y,str);</p><p><b> }</b></p><p>
52、 //計算時鐘指針的夾角</p><p> Radians=(double)Time.GetHour()+(double)Time.GetMinute()/60.0+(double)Time.GetSecond()/3600.0;</p><p> Radians*=6.28/12.0;</p><p> //創(chuàng)建時鐘指針畫筆</p><p
53、> CPen HourPen(PS_SOLID,5,RGB(100,200,100));</p><p> pDC->SelectObject(&HourPen);</p><p><b> //繪制時鐘指針</b></p><p> pDC->MoveTo(CenterX,CenterY);</p>
54、;<p> pDC->LineTo(CenterX+(int)((double)(CenterX/3)*sin(Radians)),CenterY-(int)((double)(CenterY/3)*cos(Radians)));</p><p> Radians=(double)Time.GetMinute()+(double)Time.GetSecond()/60.0;</p&g
55、t;<p> Radians*=6.28/60.0;</p><p> //創(chuàng)建分鐘指針畫筆</p><p> CPen MinutePen(PS_SOLID,3,RGB(0,0,255));</p><p> pDC->SelectObject(&MinutePen);</p><p><b>
56、 //繪制分鐘指針</b></p><p> pDC->MoveTo(CenterX,CenterY);</p><p> pDC->LineTo(CenterX+(int)((double)(CenterX*2)/3)*sin(Radians),CenterY-(int)((double)(CenterY*2/3)*cos(Radians)));</p
57、><p> Radians=(double)Time.GetSecond();</p><p> Radians*=6.28/60.0;</p><p> //創(chuàng)建秒鐘指針畫筆</p><p> CPen SecondPen(PS_SOLID,1,RGB(0,25,0));</p><p> pDC->Se
58、lectObject(&SecondPen);</p><p><b> //繪制秒鐘指針</b></p><p> pDC->MoveTo(CenterX,CenterY);</p><p> pDC->LineTo(CenterX+(int)((double)(CenterX*4)/5)*sin(Radians),
59、CenterY-(int)((double)(CenterY*4)/5*cos(Radians)));</p><p> pDC->SelectObject(OldPen);</p><p> // TODO: add draw code for native data here</p><p><b> }</b></p&g
60、t;<p> /////////////////////////////////////////////////////////////////////////////</p><p> // CMy2View printing</p><p> BOOL CMy2View::OnPreparePrinting(CPrintInfo* pInfo)</p>
61、<p><b> {</b></p><p> // default preparation</p><p> //這個函數(shù)是doc/view結(jié)構(gòu)的MFC程序中固有的,用來為繪制做準(zhǔn)備,無需要自己調(diào)用,</p><p> //當(dāng)MFC程序運行時,系統(tǒng)自動調(diào)用當(dāng)返回1時表明開始繪制,0時告訴系統(tǒng)繪制被取消</p>
62、<p> return DoPreparePrinting(pInfo);</p><p><b> }</b></p><p> void CMy2View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)</p><p><b> {</b>
63、</p><p> // TODO: add extra initialization before printing</p><p><b> }</b></p><p> void CMy2View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)</p><p
64、><b> {</b></p><p> // TODO: add cleanup after printing</p><p><b> }</b></p><p> //////////////////////////////////////////////////////////////////////
65、///////</p><p> // CMy2View diagnostics</p><p> #ifdef _DEBUG</p><p> void CMy2View::AssertValid() const</p><p><b> {</b></p><p> CView::A
66、ssertValid();</p><p><b> }</b></p><p> void CMy2View::Dump(CDumpContext& dc) const</p><p><b> {</b></p><p> CView::Dump(dc);</p>
67、<p><b> }</b></p><p> CMy2Doc* CMy2View::GetDocument() // non-debug version is inline</p><p><b> {</b></p><p> ASSERT(m_pDocument->IsKindOf(RUNTI
68、ME_CLASS(CMy2Doc)));</p><p> return (CMy2Doc*)m_pDocument;</p><p><b> }</b></p><p> #endif //_DEBUG</p><p> ////////////////////////////////////////////
69、/////////////////////////////////</p><p> // CMy2View message handlers</p><p> void CMy2View::OnTimer(UINT nIDEvent) </p><p><b> {</b></p><p> // TODO:
70、Add your message handler code here and/or call default</p><p> InvalidateRect(NULL,true);</p><p> UpdateWindow();</p><p> CView::OnTimer(nIDEvent);</p><p><b>
71、 }</b></p><p> int CMy2View::OnCreate(LPCREATESTRUCT lpCreateStruct) </p><p><b> {</b></p><p> if (CView::OnCreate(lpCreateStruct) == -1)</p><p>
72、return -1;</p><p> // TODO: Add your specialized creation code here</p><p> SetTimer(1,1000,NULL);</p><p><b> return 0;</b></p><p><b> }</b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 指針式時鐘課程設(shè)計報告
- 指針式時鐘設(shè)計 開題報告
- c語言課程設(shè)計--指針式鬧鐘
- 基于tft-lcd的指針式時鐘設(shè)計
- 畢業(yè)設(shè)計--基于tft-lcd的指針式時鐘設(shè)計
- 畢業(yè)設(shè)計---基于tft-lcd的指針式時鐘設(shè)計
- 微機原理課程設(shè)計---指針顯示時鐘
- 課程設(shè)計---指針式mf47萬用表
- 信息工程學(xué)院課程設(shè)計--lcd顯示的指針式電子鐘
- 基于圖像處理的指針式儀表識別設(shè)計
- 指針式電子鐘畢業(yè)論文
- lcd顯示的指針式電子鐘
- 指針式儀表圖像采集技術(shù)的研究.pdf
- 指針式儀表信息采集系統(tǒng)研究.pdf
- 指針式儀表圖像分割技術(shù)的研究(1)
- gbt 6044-2016 指針式石英手表
- lcd顯示的指針式電子鐘
- 指針式儀表自動校驗系統(tǒng)的研究和設(shè)計.pdf
- 指針式儀表視覺檢測系統(tǒng)的研究.pdf
- 指針式儀表自動檢定算法研究.pdf
評論
0/150
提交評論