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

下載本文檔

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

文檔簡介

1、<p><b>  簡單畫圖程序</b></p><p><b>  1 基本功能描述</b></p><p>  1) 在單文檔菜單中,在菜單行中可插入一個菜單項(xiàng),命名為繪圖,在下拉菜單中可分別設(shè)置繪制的圖形形狀,如直線、矩形及橢圓,隨手畫選項(xiàng),有1-5可供選擇,按默認(rèn)的畫筆,畫刷來繪制選擇的圖形。</p><p&

2、gt;  2) 選擇好圖形后,通過鼠標(biāo)可以繪制出相應(yīng)的直線,矩形或橢圓,鼠標(biāo)的按下確定圖形的起點(diǎn),鼠標(biāo)的拖動則確定了圖形的終點(diǎn),即通過鼠標(biāo)的拖動來決定圖形的大小,當(dāng)鼠標(biāo)彈起,此圖形則繪制完畢。</p><p><b>  2 設(shè)計思路</b></p><p>  1) 對需要用到的變量進(jìn)行初始化。</p><p>  2) 選擇相應(yīng)的圖形之后就

3、響應(yīng)相應(yīng)的消息處理函數(shù)。選擇不同的線寬,即可改變畫筆的屬性。</p><p>  3) 鼠標(biāo)的按下響應(yīng)函數(shù)OnLButtonDown(),捕捉鼠標(biāo)當(dāng)前位置得到起點(diǎn)的坐標(biāo),鼠標(biāo)的拖動響函數(shù)OnMouseMove()改變終點(diǎn)的坐標(biāo),鼠標(biāo)的彈起響應(yīng)OnLButtonUp(),確定終點(diǎn)坐標(biāo),刷新,得到繪制圖形。</p><p>  4) 選擇圖形或其它屬性,可進(jìn)行下一次繪制。</p>

4、<p><b>  3 軟件設(shè)計</b></p><p><b>  3.1 設(shè)計步驟</b></p><p><b>  1)創(chuàng)建單文檔</b></p><p>  創(chuàng)建一個MFC AppWizard[exe]工程,命名為“draw”,,并創(chuàng)建單文檔。創(chuàng)建成功后,系統(tǒng)自動生成相應(yīng)的類。&

5、lt;/p><p><b>  編輯菜單</b></p><p>  添加需要的菜單項(xiàng),并在菜單的屬性中設(shè)定好所對應(yīng)的ID,(其中線寬菜單為彈出菜單,只需在菜單項(xiàng)目屬性中的彈出選項(xiàng)前打勾即可,分隔線亦只需在菜單項(xiàng)目屬性中選中分隔符選項(xiàng)即可)。</p><p>  建立類向?qū)?,在視圖類CdrawView中,對各菜單項(xiàng)添加對應(yīng)的COMMAND消息處理函

6、數(shù),部分菜單項(xiàng)還添加對應(yīng)的UPDATE_COMMAND_UI消息函數(shù),。</p><p><b>  建立類向?qū)?lt;/b></p><p>  在插入處選擇資源,新建工具欄, </p><p>  在工具欄上添加相應(yīng)的按鈕,在屬性處更改其ID, </p><p>  4)在相應(yīng)消息函數(shù)處添加代碼,實(shí)現(xiàn)其功能</p&g

7、t;<p>  建立類向?qū)?,在視圖類CdrawView中,添加WM_PAINT消息,以及WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相應(yīng)的代碼。 </p><p>  3.3 關(guān)鍵功能實(shí)現(xiàn)</p><p>  1)選擇要繪制的圖形</p><p>  在直線、矩形以及橢圓的消息處理函數(shù)里為shape

8、分別賦值為1,2,3,在OnPaint()函數(shù)里添加3個if語句的代碼來這實(shí)現(xiàn)這三個圖形的繪制:當(dāng)選擇畫直線時,shape=1,則執(zhí)行繪制直線代碼,當(dāng)選擇畫矩形時,shape =2,則執(zhí)行繪制矩形的代碼,當(dāng)性選擇畫橢圓時,shape=3,則執(zhí)行繪制橢圓的代碼。</p><p><b>  5)繪制圖形</b></p><p>  鼠標(biāo)左鍵按下,則捕獲鼠標(biāo)此時的位置坐標(biāo)

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

10、LButtonUp()函數(shù)。</p><p><b>  4 結(jié)論與心得體會</b></p><p>  這次課程設(shè)計我成功的完成了。通過本次課程設(shè)計,我完成了用移動鼠標(biāo)對直線,矩形,橢圓的簡單繪制工具的的制作,其中完成了繪圖形狀的選擇的設(shè)置。</p><p>  基于平時課外上機(jī)實(shí)驗(yàn)的練習(xí),對菜單的創(chuàng)建,COMMAND消息處理函數(shù)和 UPDA

11、TE_COMMAND_UI消息函數(shù)的添加過程比較熟練,這部分還算簡單。難的是代碼的添加,對繪制圖形的程序有大概的思路,但具體編寫時變量的運(yùn)用以及函數(shù)的調(diào)用設(shè)置。這次實(shí)驗(yàn)中關(guān)鍵就是確定畫圖起點(diǎn)及終點(diǎn)坐標(biāo),因?yàn)槭怯檬髽?biāo)繪制圖形,所以需用函數(shù)來捕獲鼠標(biāo)當(dāng)前所在位置的坐標(biāo),因此我設(shè)置了OnLButtonDown()函數(shù)來捕獲起點(diǎn)坐標(biāo),OnMouseMove()函數(shù)來捕獲鼠標(biāo)移動是的當(dāng)前位置坐標(biāo),OnLButtonUp()函數(shù)來捕獲終點(diǎn)坐標(biāo)。而繪

12、制圖形使用的函數(shù)是OnPaint(),將圖形的起點(diǎn)和終點(diǎn)坐標(biāo)和鼠標(biāo)的位置坐標(biāo)相聯(lián)系后就能用鼠標(biāo)來繪制圖形了,所以在它們之間用opoint和cpoint兩變量實(shí)現(xiàn)鏈接。另外我覺得將繪圖語句集中在OnPaint()函數(shù)中,然后其他函數(shù)來調(diào)用OnPaint()函數(shù),這樣不容易引起混亂,同時程序更簡單,更有條理,便于修改。</p><p>  這次課程設(shè)計雖只是做了一個極其簡單的繪圖工具的制作,但也讓我從設(shè)計者的角度看到

13、了設(shè)計程序以及電腦軟件工具的實(shí)質(zhì)及難度,看似一個很簡單的工具,其制作的背后工作是很大的,不光是圖標(biāo),按鈕的設(shè)置,程序的編寫,代碼的實(shí)現(xiàn)都是很精密且不容許一點(diǎn)錯誤的工作。平時我們使用的很順手的一個小小工具,其開發(fā)的各項(xiàng)小號都不可小覷,由此,我們需要學(xué)的東西還太多太多。</p><p><b>  5. 參考文獻(xiàn)</b></p><p><b>  Csdn 朱

14、志強(qiáng)</b></p><p><b>  6 測試結(jié)果</b></p><p>  1)點(diǎn)擊鏈接,編譯,運(yùn)行后的窗口所示。</p><p><b>  7 主要代碼</b></p><p>  // DrawView.cpp : implementation of the CDraw

15、View class</p><p><b>  //</b></p><p>  #include "stdafx.h"</p><p>  #include "Draw.h"</p><p>  #include "DrawDoc.h"</p>

16、<p>  #include "DrawView.h"</p><p>  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;

17、</p><p><b>  #endif</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CDrawView</p><p>  IMPLEMENT_DYNC

18、REATE(CDrawView, CView)</p><p>  BEGIN_MESSAGE_MAP(CDrawView, CView)</p><p>  //{{AFX_MSG_MAP(CDrawView)</p><p>  ON_COMMAND(ID_DRAW_ELLIPSE, OnDrawEllipse)</p><p>  ON

19、_COMMAND(ID_DRAW_RECTANGLE, OnDrawRectangle)</p><p>  ON_COMMAND(ID_DRAW_SKETCH, OnDrawSketch)</p><p>  ON_WM_LBUTTONDOWN()</p><p>  ON_WM_LBUTTONUP()</p><p>  ON_WM_MO

20、USEMOVE()</p><p>  ON_UPDATE_COMMAND_UI(ID_DRAW_ELLIPSE, OnUpdateDrawEllipse)</p><p>  ON_UPDATE_COMMAND_UI(ID_DRAW_RECTANGLE, OnUpdateDrawRectangle)</p><p>  ON_UPDATE_COMMAND_UI(I

21、D_DRAW_SKETCH, OnUpdateDrawSketch)</p><p>  //}}AFX_MSG_MAP</p><p>  // Standard printing commands</p><p>  ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)</p><p>  ON_CO

22、MMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)</p><p>  ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)</p><p>  END_MESSAGE_MAP()</p><p>  ///////////////////////////

23、//////////////////////////////////////////////////</p><p>  // CDrawView construction/destruction</p><p>  CDrawView::CDrawView()</p><p><b>  {</b></p><p> 

24、 // TODO: add construction code here</p><p>  CDrawApp theApp;</p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CDrawApp initializa

25、tion</p><p>  BOOL CDrawApp::InitInstance()</p><p><b>  {</b></p><p>  AfxEnableControlContainer();</p><p>  // Standard initialization</p><p>

26、  // If you are not using these features and wish to reduce the size</p><p>  // of your final executable, you should remove from the following</p><p>  // the specific initialization routines

27、 you do not need.</p><p>  #ifdef _AFXDLL</p><p>  Enable3dControls();// Call this when using MFC in a shared DLL</p><p><b>  #else</b></p><p>  Enable3d

28、ControlsStatic();// Call this when linking to MFC statically</p><p><b>  #endif</b></p><p>  // Change the registry key under which our settings are stored.</p><p>  //

29、 TODO: You should modify this string to be something appropriate</p><p>  // such as the name of your company or organization.</p><p>  SetRegistryKey(_T("Local AppWizard-Generated Applicat

30、ions"));</p><p>  LoadStdProfileSettings(); // Load standard INI file options (including MRU)</p><p>  // Register the application's document templates. Document templates</p>

31、<p>  // serve as the connection between documents, frame windows and views.</p><p>  CSingleDocTemplate* pDocTemplate;</p><p>  pDocTemplate = new CSingleDocTemplate(</p><p>

32、  IDR_MAINFRAME,</p><p>  RUNTIME_CLASS(CDrawDoc),</p><p>  RUNTIME_CLASS(CMainFrame), // main SDI frame window</p><p>  RUNTIME_CLASS(CDrawView));</p><p>  AddDo

33、cTemplate(pDocTemplate);</p><p>  // Parse command line for standard shell commands, DDE, file open</p><p>  CCommandLineInfo cmdInfo;</p><p>  ParseCommandLine(cmdInfo);</p>

34、<p>  // Dispatch commands specified on the command line</p><p>  if (!ProcessShellCommand(cmdInfo))</p><p>  return FALSE;</p><p>  // The one and only window has been initia

35、lized, so show and update it.</p><p>  m_pMainWnd->ShowWindow(SW_SHOW);</p><p>  m_pMainWnd->UpdateWindow();</p><p>  return TRUE;</p><p><b>  }</b>&l

36、t;/p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CAboutDlg dialog used for App About</p><p>  class CAboutDlg : public CDialog</p

37、><p><b>  {</b></p><p><b>  public:</b></p><p>  CAboutDlg();</p><p>  // Dialog Data</p><p>  //{{AFX_DATA(CAboutDlg)</p><

38、p>  enum { IDD = IDD_ABOUTBOX };</p><p>  //}}AFX_DATA</p><p>  // ClassWizard generated virtual function overrides</p><p>  //{{AFX_VIRTUAL(CAboutDlg)</p><p>  prot

39、ected:</p><p>  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support</p><p>  //}}AFX_VIRTUAL</p><p>  // Implementation</p><p>  protected:</p>

40、<p>  //{{AFX_MSG(CAboutDlg)</p><p>  // No message handlers</p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  };</b></p><p&

41、gt;  CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)</p><p><b>  {</b></p><p>  //{{AFX_DATA_INIT(CAboutDlg)</p><p>  //}}AFX_DATA_INIT</p><p><b>  }

42、</b></p><p>  void CAboutDlg::DoDataExchange(CDataExchange* pDX)</p><p><b>  {</b></p><p>  CDialog::DoDataExchange(pDX);</p><p>  //{{AFX_DATA_MAP(CA

43、boutDlg)</p><p>  //}}AFX_DATA_MAP</p><p><b>  }</b></p><p>  BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)</p><p>  //{{AFX_MSG_MAP(CAboutDlg)</p><p>

44、  // No message handlers</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  // App command to run the dialog</p><p>  void CDrawApp::OnAppAbout()</p>&

45、lt;p><b>  {</b></p><p>  CAboutDlg aboutDlg;</p><p>  aboutDlg.DoModal();</p><p><b>  }</b></p><p>  ////////////////////////////////////////

46、/////////////////////////////////////</p><p>  // CDrawApp message handlers</p><p>  // DrawDoc.cpp : implementation of the CDrawDoc class</p><p><b>  //</b></p>

47、<p>  #include "stdafx.h"</p><p>  #include "Draw.h"</p><p>  #include "DrawDoc.h"</p><p>  #ifdef _DEBUG</p><p>  #define new DEBUG_

48、NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b></p><p>  /////////////////////////////////////////////////

49、////////////////////////////</p><p>  // CDrawDoc</p><p>  IMPLEMENT_DYNCREATE(CDrawDoc, CDocument)</p><p>  BEGIN_MESSAGE_MAP(CDrawDoc, CDocument)</p><p>  //{{AFX_MSG

50、_MAP(CDrawDoc)</p><p>  // NOTE - the ClassWizard will add and remove mapping macros here.</p><p>  // DO NOT EDIT what you see in these blocks of generated code!</p><p>  //}}AF

51、X_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CDrawDoc construction/destruction</p>

52、<p>  CDrawDoc::CDrawDoc()</p><p><b>  {</b></p><p>  // TODO: add one-time construction code here</p><p><b>  }</b></p><p>  CDrawDoc::~CD

53、rawDoc()</p><p><b>  {</b></p><p><b>  }</b></p><p>  BOOL CDrawDoc::OnNewDocument()</p><p><b>  {</b></p><p>  if (!CD

54、ocument::OnNewDocument())</p><p>  return FALSE;</p><p>  // TODO: add reinitialization code here</p><p>  // (SDI documents will reuse this document)</p><p>  return T

55、RUE;</p><p><b>  }</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CDrawDoc serialization</p><p>  vo

56、id CDrawDoc::Serialize(CArchive& ar)</p><p><b>  {</b></p><p>  if (ar.IsStoring())</p><p><b>  {</b></p><p>  // TODO: add storing code her

57、e</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  // TODO: add loading code here</p><p><b>  }&

58、lt;/b></p><p><b>  }</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CDrawDoc diagnostics</p><p> 

59、 #ifdef _DEBUG</p><p>  void CDrawDoc::AssertValid() const</p><p><b>  {</b></p><p>  CDocument::AssertValid();</p><p><b>  }</b></p><

60、;p>  void CDrawDoc::Dump(CDumpContext& dc) const</p><p><b>  {</b></p><p>  CDocument::Dump(dc);</p><p><b>  }</b></p><p>  #endif //_DEB

61、UG</p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CDrawDoc commands</p><p>  // MainFrm.cpp : implementation of the CMainFrame cl

62、ass</p><p><b>  //</b></p><p>  #include "stdafx.h"</p><p>  #include "Draw.h"</p><p>  #include "MainFrm.h"</p><p&

63、gt;  #ifdef _DEBUG</p><p>  #define new DEBUG_NEW</p><p>  #undef THIS_FILE</p><p>  static char THIS_FILE[] = __FILE__;</p><p><b>  #endif</b></p>&

64、lt;p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CMainFrame</p><p>  IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)</p><p>  BEGIN_MES

65、SAGE_MAP(CMainFrame, CFrameWnd)</p><p>  //{{AFX_MSG_MAP(CMainFrame)</p><p>  // NOTE - the ClassWizard will add and remove mapping macros here.</p><p>  // DO NOT EDIT what you

66、see in these blocks of generated code !</p><p>  ON_WM_CREATE()</p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP()</p><p>  static UINT indicators[] =</p><p

67、><b>  {</b></p><p>  ID_SEPARATOR, // status line indicator</p><p>  ID_INDICATOR_CAPS,</p><p>  ID_INDICATOR_NUM,</p><p>  ID_INDICATOR_SCRL,&

68、lt;/p><p><b>  };</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CMainFrame construction/destruction</p><

69、p>  CMainFrame::CMainFrame()</p><p><b>  {</b></p><p>  // TODO: add member initialization code here</p><p><b>  }</b></p><p>  CMainFrame::~

70、CMainFrame()</p><p><b>  {</b></p><p><b>  }</b></p><p>  int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)</p><p><b>  {</b>&

71、lt;/p><p>  if (CFrameWnd::OnCreate(lpCreateStruct) == -1)</p><p>  return -1;</p><p>  if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP</p><p

72、>  | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||</p><p>  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))</p><p><b>  {</b></p><p>  TRACE0("Fail

73、ed to create toolbar\n");</p><p>  return -1; // fail to create</p><p><b>  }</b></p><p>  if (!m_wndStatusBar.Create(this) ||</p><p>  !m_wndStat

74、usBar.SetIndicators(indicators,</p><p>  sizeof(indicators)/sizeof(UINT)))</p><p><b>  {</b></p><p>  TRACE0("Failed to create status bar\n");</p><p

75、>  return -1; // fail to create</p><p><b>  }</b></p><p>  // TODO: Delete these three lines if you don't want the toolbar to</p><p>  // be dockable</p&

76、gt;<p>  m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);</p><p>  EnableDocking(CBRS_ALIGN_ANY);</p><p>  DockControlBar(&m_wndToolBar);</p><p><b>  return 0;</b>

77、</p><p><b>  }</b></p><p>  BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)</p><p><b>  {</b></p><p>  if( !CFrameWnd::PreCreateWindow(cs

78、) )</p><p>  return FALSE;</p><p>  // TODO: Modify the Window class or styles here by modifying</p><p>  // the CREATESTRUCT cs</p><p>  return TRUE;</p><p

79、><b>  }</b></p><p>  /////////////////////////////////////////////////////////////////////////////</p><p>  // CMainFrame diagnostics</p><p>  #ifdef _DEBUG</p>

80、<p>  void CMainFrame::AssertValid() const</p><p><b>  {</b></p><p>  CFrameWnd::AssertValid();</p><p><b>  }</b></p><p>  void CMainFram

81、e::Dump(CDumpContext& dc) const</p><p><b>  {</b></p><p>  CFrameWnd::Dump(dc);</p><p><b>  }</b></p><p>  #endif //_DEBUG</p><p&

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論