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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  目 錄</b></p><p>  1 基本功能描述----------------------------------------------------------1</p><p>  2 設(shè)計(jì)思路----------------------------------------------------------1</p>

2、;<p>  3 軟件設(shè)計(jì)----------------------------------------------------------3</p><p>  3.1 設(shè)計(jì)步驟----------------------------------------------------------3</p><p>  3.2 界面設(shè)計(jì)--------------------

3、--------------------------------------7</p><p>  3.3 關(guān)鍵功能實(shí)----------------------------------------------------------8</p><p>  4. 附錄----------------------------------------------------------9<

4、;/p><p>  4.1 調(diào)試報(bào)告----------------------------------------------------------9</p><p>  4.2 測試結(jié)果----------------------------------------------------------10</p><p>  4.3關(guān)鍵源代碼----------

5、-----------------------------------------------10</p><p>  5 結(jié)論與心得體會(huì)----------------------------------------------------------11</p><p>  6. 參考文獻(xiàn)-------------------------------------------------

6、---------11</p><p>  7. 思考題----------------------------------------------------------11</p><p><b>  簡單畫圖程序</b></p><p><b>  1 基本功能描述</b></p><p> 

7、 1) 在單文檔菜單中,在菜單行中可插入一個(gè)菜單項(xiàng),命名為繪圖,在下拉菜單中可分別設(shè)置繪制的圖形形狀,如直線、矩形及橢圓,線寬選項(xiàng),有1-5可供選擇,還可以設(shè)置線色以及填充色,通過彈出的顏色對話框選擇需要的顏色,如果不選擇線寬、線色以及填充色,則按默認(rèn)的畫筆,畫刷來繪制選擇的圖形。</p><p>  2) 選擇好圖形后,通過鼠標(biāo)可以繪制出相應(yīng)的直線,矩形或橢圓,鼠標(biāo)的按下確定圖形的起點(diǎn),鼠標(biāo)的拖動(dòng)則確定了圖形的

8、終點(diǎn),即通過鼠標(biāo)的拖動(dòng)來決定圖形的大小,當(dāng)鼠標(biāo)彈起,此圖形則繪制完畢。</p><p>  3) 增添工具欄,設(shè)置繪制的圖形形狀,線色以及填充色,可更方便地選擇相應(yīng)的功能。</p><p><b>  2 設(shè)計(jì)思路</b></p><p>  1) 對需要用到的變量進(jìn)行初始化。</p><p>  2) 選擇相應(yīng)的圖形之

9、后就響應(yīng)相應(yīng)的消息處理函數(shù),給shape賦對應(yīng)的值。選擇不同的線寬,線色與填充色,即可改變畫筆或畫刷的屬性。</p><p>  3) 鼠標(biāo)的按下響應(yīng)函數(shù)OnLButtonDown(),捕捉鼠標(biāo)當(dāng)前位置得到起點(diǎn)的坐標(biāo),鼠標(biāo)的拖動(dòng)響函數(shù)OnMouseMove()改變終點(diǎn)的坐標(biāo),鼠標(biāo)的彈起響應(yīng)OnLButtonUp(),確定終點(diǎn)坐標(biāo),刷新,得到繪制圖形。</p><p>  4) 選擇圖形或其

10、它屬性,可進(jìn)行下一次繪制。</p><p><b>  圖1 程序流程圖</b></p><p><b>  3 軟件設(shè)計(jì)</b></p><p><b>  3.1 設(shè)計(jì)步驟</b></p><p><b>  1)創(chuàng)建單文檔</b></p>

11、;<p>  創(chuàng)建一個(gè)MFC AppWizard[exe]工程,命名為“yinshuyan”,如圖1所示,并創(chuàng)建單文檔,如圖2所示。創(chuàng)建成功后,系統(tǒng)自動(dòng)生成相應(yīng)的類,如圖3所示。</p><p><b>  圖2 創(chuàng)建工程</b></p><p><b>  圖3 創(chuàng)建單文檔</b></p><p>&l

12、t;b>  圖4 生成類</b></p><p><b>  編輯菜單</b></p><p>  添加需要的菜單項(xiàng),如圖4所示;并在菜單的屬性中設(shè)定好所對應(yīng)的ID,如圖5所示,各項(xiàng)菜單對應(yīng)的ID如表1所示(其中線寬菜單為彈出菜單,只需在菜單項(xiàng)目屬性中的彈出選項(xiàng)前打勾即可,分隔線亦只需在菜單項(xiàng)目屬性中選中分隔符選項(xiàng)即可)。</p>&

13、lt;p><b>  圖5 添加菜單項(xiàng)</b></p><p>  圖6 設(shè)置菜單ID</p><p>  表1 菜單項(xiàng)對應(yīng)ID</p><p>  建立類向?qū)?,在視圖類CyinshuyanView中,對各菜單項(xiàng)添加對應(yīng)的COMMAND消息處理函數(shù),部分菜單項(xiàng)還添加對應(yīng)的UPDATE_COMMAND_UI消息函數(shù),如圖6所示。<

14、;/p><p>  圖7 建立類向?qū)?lt;/p><p><b>  3)創(chuàng)建工具欄</b></p><p>  在插入處選擇資源,新建工具欄,如圖7所示;</p><p><b>  圖8 新建工具欄</b></p><p>  在工具欄上添加相應(yīng)的按鈕,在屬性處更改其ID,

15、如圖8所示。</p><p><b>  圖9 編輯工具欄</b></p><p>  4)在相應(yīng)消息函數(shù)處添加代碼,實(shí)現(xiàn)其功能</p><p>  建立類向?qū)?,在視圖類CyinshuyanView中,添加WM_PAINT消息,以及WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相應(yīng)的代碼,如

16、圖9所示。</p><p>  圖10 添加WM_PAINT消息</p><p><b>  3.2 界面設(shè)計(jì)</b></p><p>  各控件名稱,類型,屬性及相關(guān)變量如表2所示。 </p><p><b>  表2 界面控件表</b></p

17、><p>  續(xù)表2 界面控件表</p><p>  3.3 關(guān)鍵功能實(shí)現(xiàn)</p><p>  1)選擇要繪制的圖形</p><p>  在直線、矩形以及橢圓的消息處理函數(shù)里為shape分別賦值為1,2,3,在OnPaint()函數(shù)里添加3個(gè)if語句的代碼來這實(shí)現(xiàn)這三個(gè)圖形的繪制:當(dāng)選擇畫直線時(shí),shape=1,則執(zhí)行繪制直線代碼,當(dāng)選擇畫矩形

18、時(shí),shape =2,則執(zhí)行繪制矩形的代碼,當(dāng)性選擇畫橢圓時(shí),shape=3,則執(zhí)行繪制橢圓的代碼。</p><p><b>  2)改變線寬</b></p><p>  在OnPaint()創(chuàng)建的畫筆中,pen.CreatePen(PS_SOLID,w, m_nColor),線寬處用w表示,則改變w的值即改變了畫筆的粗細(xì)。選擇菜單繪圖→線寬選擇劃線寬度值,此時(shí)所選的

19、線寬值就賦給線寬變量w。若不選擇線寬值,則w=1(即默認(rèn)線寬值為1)。</p><p><b>  3)改變線色</b></p><p>  在OnPaint()創(chuàng)建的畫筆中,pen.CreatePen(PS_SOLID,w, m_nColor),線的顏色處用m_nColor表示,則改變m_nColor即改變了畫筆的顏色。選擇菜單繪圖→顏色,會(huì)彈出通過WM_COLOR

20、REF從系統(tǒng)中引入的顏色選擇對話框,選擇顏色后,點(diǎn)擊確定則相應(yīng)顏色值就賦給變量m_nColor,此時(shí)畫筆的顏色就會(huì)發(fā)上變化。若不選擇顏色,則默認(rèn)(線)顏色為黑色。</p><p><b>  4)改變填充色</b></p><p>  在OnPaint()創(chuàng)建的畫刷中,brush.CreateSolidBrush(m_fColor),顏色就是用m_fColor表示的,

21、改變m_fColor即改變了畫刷的顏色。選擇菜單繪圖→填充色,會(huì)彈出通過WM_COLORREF從系統(tǒng)中引入的顏色選擇對話框,選擇顏色后,點(diǎn)擊確定則相應(yīng)顏色值就賦給變量m_fColor,此時(shí)畫刷的顏色就會(huì)發(fā)上變化。若不選擇顏色,則默認(rèn)填充色為黑色。</p><p><b>  5)繪制圖形</b></p><p>  鼠標(biāo)左鍵按下,則捕獲鼠標(biāo)此時(shí)的位置坐標(biāo)為畫圖的起點(diǎn),

22、此時(shí)在OnLButtonDown()函數(shù)里,將捕獲的坐標(biāo)值賦給定義作為起點(diǎn)的變量opoint;按下鼠標(biāo)左鍵拖動(dòng)鼠標(biāo)時(shí),捕捉鼠標(biāo)當(dāng)前位置坐標(biāo)值為終點(diǎn)坐標(biāo)值,此時(shí)在OnMouseMove()函數(shù)里,把捕獲的坐標(biāo)值賦給定義作為終點(diǎn)的變量cpoint,OnPaint()中繪圖的代碼中的坐標(biāo)都得到了,進(jìn)行繪圖;鼠標(biāo)左鍵彈起時(shí),此時(shí)繪圖結(jié)束,鼠標(biāo)彈起時(shí)所在位置就是畫圖的最終終點(diǎn)位置,畫圖結(jié)束后,刷新窗口,以便重新畫圖,此時(shí)執(zhí)行的是OnLButton

23、Up()函數(shù)。</p><p>  圖11 快捷鍵的創(chuàng)建</p><p><b>  4. 附錄</b></p><p><b>  4.1 調(diào)試報(bào)告</b></p><p>  1)一開始我并沒有添加刷新函數(shù)Invalidate(),這就使程序運(yùn)行之后,無論鼠標(biāo)左鍵按下時(shí)如何移動(dòng)無法繪圖,這是因

24、為當(dāng)一個(gè)窗口內(nèi)鍵入內(nèi)容其實(shí)就是將窗口刷新了,相當(dāng)于更新了窗口,故必須有刷新函數(shù),這和生活中的白紙寫字不一樣。</p><p>  2)當(dāng)添加Invalidate()后,我把Invalidate()放在OnMouseMove()里,但是這樣只能在窗口內(nèi)畫一個(gè)圖形,即每畫完一個(gè)圖形就刷新一次。之后我通過與同學(xué)討論,并查找資料將Invalidate()改為了Invalidate(0),這時(shí)是可繪制多個(gè)圖形,但鼠標(biāo)每移動(dòng)

25、一個(gè)位置都進(jìn)行一次刷新,繪圖結(jié)束后,繪圖過程中的所有痕跡都在,產(chǎn)生了很多拖動(dòng)的影子。,經(jīng)過幾次試驗(yàn),我將Invalidate(0) 放在了OnLButtonUp()中,那么每次重繪,上次的圖形會(huì)作為背景被保留下來,而不會(huì)被刷新掉。</p><p><b>  4.2 測試結(jié)果</b></p><p>  1)點(diǎn)擊鏈接,編譯,運(yùn)行后的窗口如圖11所示。</p>

26、;<p>  圖11 運(yùn)行結(jié)果</p><p>  2)改變繪制圖形形狀,顏色,線寬,填充色之后繪制的圖形如圖12所示。</p><p>  圖12 改便各項(xiàng)屬性厚后的圖形</p><p><b>  4.3 關(guān)鍵源代碼</b></p><p>  在“MainFrm.h”中,在class CMain

27、Frame : public CFrameWnd里的protected下定義:</p><p>  CToolBar m_drawToolBar; //工具欄</p><p>  2)在“MainFrm.cpp”中,在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)里添加以下代碼:</p><p>  if

28、(!m_drawToolBar.Create(this) ||</p><p>  !m_drawToolBar.LoadToolBar(IDR_DRAW))</p><p>  {TRACE0("Failed to create status bar\n");</p><p>  return -1; </p><

29、;p>  } </p><p>  3)在“YinshuyanView.h”中,在class CYinshuyanView : public CView里的public下定義相關(guān)變量:</p><p>  COLORREF m_nColor;</p><p>  COLORREF m_fColor;</p><p>  

30、CPoint cpoint; </p><p>  CPoint opoint;</p><p>  BOOL m_Down;</p><p><b>  int w;</b></p><p>  int shape;</p><p>  4)在“YinshuyanView.cpp”中,添加如下函

31、數(shù)及代碼:</p><p>  CYinshuyanView:: CYinshuyanView()</p><p>  { w=1; //初始線寬默認(rèn)為1</p><p><b>  shape=0;</b></p><p><b>  }</b></p><p&

32、gt;  void CYinshuyanView::OnW1() </p><p><b>  {</b></p><p>  w=1; //令線寬為1</p><p><b>  }</b></p><p>  void CYinshuyanView::OnW2() </p>&

33、lt;p><b>  {</b></p><p>  w=2; //令線寬為2</p><p><b>  }</b></p><p>  void CYinshuyan::OnW3() </p><p><b>  {</b></p><p&g

34、t;  w=3; //令線寬為3</p><p><b>  }</b></p><p>  void CYinshuyanView::OnW4() </p><p><b>  {</b></p><p>  w=4; //令線寬為4</p><p><b

35、>  }</b></p><p>  void CYinshuyanView::OnW5() </p><p><b>  {</b></p><p>  w=5; //令線寬為5</p><p><b>  }</b></p><p>  void

36、CYinshuyanView::OnUpdateW1(CCmdUI* pCmdUI) </p><p><b>  {</b></p><p>  pCmdUI->SetRadio(w==1); //當(dāng)線寬為1時(shí),此選項(xiàng)前標(biāo)有圓點(diǎn)</p><p><b>  }</b></p><p> 

37、 void CYinshuyanView::OnUpdateW2(CCmdUI* pCmdUI) </p><p><b>  {</b></p><p>  pCmdUI->SetRadio(w==2); //當(dāng)線寬為2時(shí),此選項(xiàng)前標(biāo)有圓點(diǎn)</p><p><b>  }</b></p><

38、p>  void CYinshuyanView::OnUpdateW3(CCmdUI* pCmdUI) </p><p><b>  {</b></p><p>  pCmdUI->SetRadio(w==3); //當(dāng)線寬為3時(shí),此選項(xiàng)前標(biāo)有圓點(diǎn)</p><p><b>  }</b></p>

39、;<p>  void CYinshuyanView::OnUpdateW4(CCmdUI* pCmdUI) </p><p><b>  {</b></p><p>  pCmdUI->SetRadio(w==4); </p><p><b>  }</b></p><p&g

40、t;  void CYinshuyanView::OnUpdateW5(CCmdUI* pCmdUI) </p><p><b>  {</b></p><p>  pCmdUI->SetRadio(w==5);</p><p><b>  }</b></p><p>  void CYins

41、huyanView::OnLine() </p><p><b>  {</b></p><p>  shape=1; //選擇直線,則令shape為1</p><p><b>  }</b></p><p>  void CYinshuyanView::OnRect() </p>

42、;<p><b>  {</b></p><p>  shape=2; //選擇矩形,則令shape為2</p><p><b>  }</b></p><p>  void CYinshuyanView::OnEllipse() </p><p><b>  {&l

43、t;/b></p><p>  shape=3; //選擇橢圓,則令shape為3</p><p><b>  }</b></p><p>  void CYinshuyanView::OnUpdateLine(CCmdUI* pCmdUI) </p><p><b>  {</b>&

44、lt;/p><p>  pCmdUI->SetCheck(shape==1); //shape為1時(shí),直線選項(xiàng)前打上勾</p><p><b>  }</b></p><p>  void CYinshuyanView::OnUpdateRect(CCmdUI* pCmdUI) </p><p><b>

45、  {</b></p><p>  pCmdUI->SetCheck(shape==2); //shape為2時(shí),矩形選項(xiàng)前打上勾</p><p><b>  }</b></p><p>  void CYinshuyanView::OnUpdateEllipse(CCmdUI* pCmdUI) </p>

46、<p><b>  {</b></p><p>  pCmdUI->SetCheck(shape==3); //shape為3時(shí),橢圓選項(xiàng)前打上勾</p><p><b>  }</b></p><p>  void CYinshuyanView::OnColor() </p><

47、p><b>  {</b></p><p>  CColorDialog Color; // 創(chuàng)建顏色對話框</p><p>  if(Color.DoModal() == IDOK) // 如果用戶點(diǎn)擊OK按鈕 </p><p>  m_nColor=Color.GetColor(); // 更改顏色,把顏色賦到m_nColor<

48、;/p><p><b>  }</b></p><p>  void CYinshuyanView::OnFullColor() </p><p><b>  {</b></p><p>  CColorDialog FullColor; // 創(chuàng)建顏色對話框</p><p> 

49、 if(FullColor.DoModal() == IDOK) // 如果用戶點(diǎn)擊OK按鈕 </p><p>  m_fColor=FullColor.GetColor(); // 更改顏色,把顏色賦到m_fColor</p><p><b>  }</b></p><p>  void CYinshuyanView::OnPaint()

50、 </p><p><b>  {</b></p><p>  CPaintDC dc(this); // device context for painting</p><p>  CPen pen; //定義畫筆</p><p>  CBrush brush; //定義畫刷</p>

51、<p>  pen.CreatePen(PS_SOLID,w, m_nColor); //創(chuàng)建畫筆</p><p>  brush.CreateSolidBrush(m_fColor); //創(chuàng)建畫刷</p><p>  dc.SelectObject(&pen); //獲取畫筆</p><p>  dc.SelectObj

52、ect(&brush); //獲取畫刷</p><p>  if(shape==1)</p><p>  {dc.MoveTo(opoint.x,opoint.y);</p><p>  dc.LineTo(cpoint.x,cpoint.y);} //繪制直線,從opoint到cpoint連線</p><p>  if(sh

53、ape==2)</p><p>  dc.Rectangle(opoint.x,opoint.y,cpoint.x,cpoint.y); //繪制矩形</p><p>  if(shape==3)</p><p>  dc.Ellipse(opoint.x,opoint.y,cpoint.x,cpoint.y);//繪制橢圓</p><p>

54、;<b>  }</b></p><p>  void CYinshuyanView::OnLButtonDown(UINT nFlags, CPoint point) </p><p><b>  {</b></p><p>  // TODO: Add your message handler code here an

55、d/or call default</p><p>  m_Down=TRUE; //鼠標(biāo)按下 </p><p>  SetCapture(); //獲取坐標(biāo)</p><p>  opoint=point; //把鼠標(biāo)所在坐標(biāo)賦給起點(diǎn)坐標(biāo)opoint</p><p>  ReleaseCapture()

56、; //釋放坐標(biāo)</p><p>  CView::OnLButtonDown(nFlags, point);</p><p><b>  }</b></p><p>  void CYinshuyanView::OnMouseMove(UINT nFlags, CPoint point) </p><p><

57、b>  {</b></p><p>  if(m_Down) //如果鼠標(biāo)按下</p><p>  cpoint=point; //把鼠標(biāo)所在點(diǎn)坐標(biāo)賦給終點(diǎn)坐標(biāo)cpoint</p><p>  CView::OnMouseMove(nFlags, point);</p><p><b>  

58、}</b></p><p>  void CYinshuyanView::OnLButtonUp(UINT nFlags, CPoint point) </p><p><b>  {</b></p><p>  m_Down=FALSE; //鼠標(biāo)不按下,即彈起</p><p>  Invalida

59、te(0); //刷新</p><p>  CView::OnLButtonUp(nFlags, point);</p><p><b>  }</b></p><p><b>  5 結(jié)論與心得體會(huì)</b></p><p>  這次課程設(shè)計(jì)我成功的完成了。通過本次課程設(shè)計(jì),我完成了用移動(dòng)鼠標(biāo)

60、對直線,矩形,橢圓的簡單繪制工具的制作,其中完成了繪圖形狀的選擇,畫圖線寬、線色以及圖形填充色的設(shè)置。</p><p>  基于平時(shí)課外上機(jī)實(shí)驗(yàn)的練習(xí),對菜單的創(chuàng)建,COMMAND消息處理函數(shù)和 UPDATE_COMMAND_UI消息函數(shù)的添加過程比較熟練,這部分還算簡單。難的是代碼的添加,對繪制圖形的程序有大概的思路,但具體編寫時(shí)變量的運(yùn)用以及函數(shù)的調(diào)用設(shè)置。這次實(shí)驗(yàn)中關(guān)鍵就是確定畫圖起點(diǎn)及終點(diǎn)坐標(biāo),因?yàn)槭怯檬?/p>

61、標(biāo)繪制圖形,所以需用函數(shù)來捕獲鼠標(biāo)當(dāng)前所在位置的坐標(biāo),因此我設(shè)置了OnLButtonDown()函數(shù)來捕獲起點(diǎn)坐標(biāo),OnMouseMove()函數(shù)來捕獲鼠標(biāo)移動(dòng)是的當(dāng)前位置坐標(biāo),OnLButtonUp()函數(shù)來捕獲終點(diǎn)坐標(biāo)。而繪制圖形使用的函數(shù)是OnPaint(),將圖形的起點(diǎn)和終點(diǎn)坐標(biāo)和鼠標(biāo)的位置坐標(biāo)相聯(lián)系后就能用鼠標(biāo)來繪制圖形了,所以在它們之間用opoint和cpoint兩變量實(shí)現(xiàn)鏈接。另外我覺得將繪圖語句集中在OnPaint()函

62、數(shù)中,然后其他函數(shù)來調(diào)用OnPaint()函數(shù),這樣不容易引起混亂,同時(shí)程序更簡單,更有條理,便于修改。</p><p>  這次課程設(shè)計(jì)雖只是做了一個(gè)極其簡單的繪圖工具的制作,但也讓我從設(shè)計(jì)者的角度看到了設(shè)計(jì)程序以及電腦軟件工具的實(shí)質(zhì)及難度,看似一個(gè)很簡單的工具,其制作的背后工作是很大的,不光是圖標(biāo),按鈕的設(shè)置,程序的編寫,代碼的實(shí)現(xiàn)都是很精密且不容許一點(diǎn)錯(cuò)誤的工作。平時(shí)我們使用的很順手的一個(gè)小小工具,其開發(fā)的

63、各項(xiàng)小號都不可小覷,由此,我們需要學(xué)的東西還太多太多。</p><p><b>  6. 參考文獻(xiàn)</b></p><p>  [1]揣錦華.面向?qū)ο蟪绦蛟O(shè)計(jì)與VC++實(shí)踐.西安電子科技大學(xué)出版社.2005.</p><p>  [2]魏亮, 李春葆編著.Visual C++程序設(shè)計(jì)例學(xué)與實(shí)踐.清華大學(xué)出版社 .2006.</p

溫馨提示

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

評論

0/150

提交評論