vc++課程設(shè)計(jì)--基于mfc的模擬時(shí)鐘_第1頁
已閱讀1頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論