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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  VC++課程設計實驗報告</p><p>  題目:基于MFC的模擬時鐘</p><p><b>  課程設計實驗報告</b></p><p>  1、題目:基于MFC的模擬時鐘</p><p><b>  2、編程要點:</b></p><p>  制

2、作時鐘的過程中,首先給時鐘創(chuàng)建一個基類CClockElement,還需要派生類CClockBackground,CClockHourHand,CClockMinHand,CClockSecHand分別控制時鐘的背景,時鐘的時針,分針,秒針。</p><p><b>  3、實現過程:</b></p><p>  工程、風格、控件與變量表</p><

3、p>  本時鐘是基本對話框的時鐘,界面簡約,便于使用。</p><p><b>  控件</b></p><p><b>  變量表</b></p><p><b>  主要功能程序代碼</b></p><p>  CClockBackground::CClockBack

4、ground()</p><p><b>  {</b></p><p>  //為時鐘背景定義默認的顏色設置</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>  //設置準備環(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個小方框,表示12個正點</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設備環(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>  //定義默認顏色</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>  //設置準備環(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>  //確定當前指針的弧度</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>  //確定繪制菱形指針所需的四個角的坐標</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>  //繪制菱形時鐘</b></p><p>  pDC->Polygon(ptDiamond,4);</p><p>  //huanyuan設備環(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>  //定義默認顏色</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>  //設置準備環(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>  //確定分針所在位

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>  //確定繪制菱形指針所需的四個角的坐標</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>  //繪制菱形時鐘</b></p><p>  pDC->Polygon(ptDiamond,4);</p><p>  //huanyuan設備環(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>  //設定秒針的默認顏色</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); //獲取當前客戶區(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>  //實現雙緩沖繪圖---防止屏幕閃爍</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); //繪制時鐘</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); //獲取當前客戶區(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、運行效果展示:&

55、lt;/b></p><p><b>  5、自我總結:</b></p><p>  該小程序是基于MFC中的對話框的,主要針對畫筆和畫刷的用法,沒有涉及連接數據庫和算法,完全是為了本學期所學知識的運用,由于時間緊,所以沒能深入的探索MFC的奧妙,不過通過本次設計,我對老師課堂上所講述的關于該類型的知識,有了進一步的了解和掌握,初步的熟悉了畫筆和畫刷的簡單用法,

56、還鞏固了MFC類中的基本操作,例如,添加新類,新變量,創(chuàng)建新的對話框,添加控件等方面的知識。程序設計過程中最大的困難就是對于MFC中的函數了解不夠,不能融會貫通的拿來運用,通過百度搜索引擎的查詢給自己提供了很大的幫助。通過此次課程設計使我深刻了解到了日常知識積累的重要性。同時通過此次課程設計,對于設計可視化窗口的程序有了更好的了解,也激發(fā)了自己對可視化窗口程序設計的興趣。而且通過這次課程設計,使自己對課本上的東西有了更好的掌握,對課程內

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論