2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

評(píng)論

0/150

提交評(píng)論