版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> C++面向?qū)ο笳n程設(shè)計(jì)報(bào)告</p><p> 院(系): 計(jì)算機(jī)工程學(xué)院 </p><p> 專業(yè): 網(wǎng)絡(luò)工程專業(yè) </p><p> 學(xué)生姓名: </p>&l
2、t;p> 班級(jí):_ __ 學(xué)號(hào): 000 </p><p> 題目: _吹泡泡課程設(shè)計(jì)________ </p><p><b> 一.需求分析: </b></p><p><b> 1.要求與功能:</b></p><p> 世界經(jīng)濟(jì)的快
3、速發(fā)展和計(jì)算機(jī)技術(shù)的日益成熟,計(jì)算機(jī)被應(yīng)用到人類生活的各個(gè)領(lǐng)域,各種應(yīng)用軟件相繼問世,嚴(yán)峻的形勢(shì)在提醒我們要跟上時(shí)代的步伐,不斷的去創(chuàng)新和完善。所以,我們必須學(xué)習(xí)更多的知識(shí)和編程工具來提高自身的能力。</p><p> 要求用鼠標(biāo)左鍵隨機(jī)在客戶區(qū)任何地方單擊,可產(chǎn)生一個(gè)圓形的泡泡(泡泡的大小隨機(jī)產(chǎn)生);可通過顏色對(duì)話框選擇不同的顏色,繪出不同顏色的泡泡;可以保存文檔,并能打開文檔。程序?qū)儆谝粋€(gè)簡單的小游戲,需要
4、用到畫圖,文檔等的操作,更考驗(yàn)了對(duì)MFC對(duì)程序的封裝性及內(nèi)聯(lián)函數(shù)的掌握與應(yīng)用。當(dāng)代社會(huì),目前Windows已成為微機(jī)上的主流操作系統(tǒng),幾乎成為大家離不開的必要需求,在Windows平臺(tái)上進(jìn)行軟件開發(fā)也已成為程序設(shè)計(jì)的主流,所以熟悉并掌握初級(jí)的可視化編程方法對(duì)我們未來的發(fā)展有直觀重要的作用,也幫助我們把握了現(xiàn)代化使用工具的流行趨勢(shì)。程序使用的MFC應(yīng)用程序必須有且只能有一個(gè)從WinApp類派生的全局應(yīng)用程序?qū)ο?,此?duì)象在運(yùn)行時(shí)刻控制應(yīng)用程
5、序中所有其他對(duì)象的活動(dòng)。通過此項(xiàng)設(shè)計(jì),了解C++編程的基本工作原理和思想,培養(yǎng)分析,解決問題的能力。</p><p> 2. 程序功能分析:</p><p> 能夠在客戶區(qū)任意地方點(diǎn)擊即產(chǎn)生一個(gè)圓形的泡泡;利用基于框架窗口的應(yīng)用程序使編程更加簡單清晰。能夠?qū)Ξa(chǎn)生的文檔進(jìn)行保存,打印,打印預(yù)覽等一些的功能;并可以在窗口區(qū)新建文檔或者關(guān)閉,打開新文檔。程序運(yùn)行過程中須保證不因操作頻繁而產(chǎn)生
6、系統(tǒng)錯(cuò)誤,系統(tǒng)安全,可靠,功能齊全,操作方便,界面友好,容易對(duì)程序的不足之處進(jìn)行修改,在程序已有的功能上利用修改,或添加一些數(shù)據(jù)成員或函數(shù)來增加更多的功能,保證程序有良好的移植性和可擴(kuò)充性。例如可以改善文檔的打印預(yù)覽效果,進(jìn)一步可以添加函數(shù)使得在泡泡窗口可以畫出矩形或其他圖形并錄入字符,且對(duì)字符可是進(jìn)行各種增刪,修改操作。程序應(yīng)用了對(duì)話框,程序利用它可以和用戶進(jìn)行交互式操作,對(duì)話框是應(yīng)用程序,用于顯示或提示并等待用戶輸入一個(gè)或多個(gè)控件,
7、利用這些控件,用戶可以輸入文本,選擇選項(xiàng),并完成某一些特定命令。</p><p><b> 二.設(shè)計(jì)內(nèi)容</b></p><p> 1.程序模塊圖 </p><p><b> 程序流程圖</b></p><p><b> 是 </b></p&g
8、t;<p> 否 </p><p><b> 3.程序代碼</b></p><p> // 文檔類 /////</p><p> class CMyDoc : public CDocument</p
9、><p><b> {</b></p><p> DECLARE_DYNCREATE(CMyDoc)</p><p> CArray <CRect, CRect&> m_rectBubble;</p><p><b> public:</b></p><
10、p><b> CMyDoc();</b></p><p> intGetListSize(){return m_rectBubble.GetSize();}</p><p> CRectGetBubble(int index){return m_rectBubble[index];}</p><p> voidAddBubb
11、le(CRect rect){m_rectBubble.Add(rect);}</p><p> virtual BOOL OnNewDocument();</p><p> virtual void DeleteContents();</p><p> virtual void Serialize(CArchive& ar);</p>
12、<p><b> };</b></p><p> IMPLEMENT_DYNCREATE(CMyDoc, CDocument)</p><p> // 構(gòu)造函數(shù):調(diào)用SDI,做初始化工作.SDI為單文檔界面程序</p><p> CMyDoc::CMyDoc()</p><p><b> {
13、</b></p><p> m_rectBubble.SetSize(256, 256);// 設(shè)置數(shù)組參數(shù)</p><p><b> }</b></p><p> // 打開新文檔時(shí)調(diào)用,做初始化工作</p><p> BOOL CMyDoc::OnNewDocument()</p>
14、<p><b> {</b></p><p> if (!CDocument::OnNewDocument())</p><p> return FALSE;</p><p> srand((unsigned)time(NULL)); // 初始化隨機(jī)數(shù)發(fā)生器</p><p> return TRU
15、E;</p><p><b> }</b></p><p> // 關(guān)閉文檔、建立新文檔前調(diào)用</p><p> void CMyDoc::DeleteContents() </p><p><b> {</b></p><p> m_rectBubble.Remo
16、veAll(); // 泡泡數(shù)組清零</p><p> CDocument::DeleteContents();</p><p><b> }</b></p><p> //讀寫文檔時(shí)自動(dòng)調(diào)用</p><p> void CMyDoc::Serialize(CArchive &ar) </p>
17、<p><b> {</b></p><p> m_rectBubble.Serialize(ar);</p><p><b> }</b></p><p> // 視圖類 /////// </p><p> class CMyView : public CView</
18、p><p><b> {</b></p><p> DECLARE_DYNCREATE(CMyView)</p><p><b> public:</b></p><p> CMyDoc* GetDocument(){return (CMyDoc*)m_pDocument;}</p>
19、<p> virtual void OnInitialUpdate();</p><p> virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);</p><p> virtual void OnDraw(CDC* pDC);</p><p> afx_msg void OnLButtonDown(
20、UINT nFlags, CPoint point); //afx_msg標(biāo)記的消息處理成員函數(shù)</p><p> DECLARE_MESSAGE_MAP()</p><p><b> };</b></p><p> IMPLEMENT_DYNCREATE(CMyView, CView)</p><p> BEG
21、IN_MESSAGE_MAP(CMyView, CView)</p><p> ON_WM_LBUTTONDOWN()</p><p> ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)</p><p> ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)</
22、p><p> ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)</p><p> END_MESSAGE_MAP()</p><p> // 建立新文檔,打開文檔時(shí)調(diào)用</p><p> void CMyView::OnInitialUpdate()</p&
23、gt;<p><b> {</b></p><p> CView::OnInitialUpdate();</p><p> Invalidate(); </p><p><b> }</b></p><p> void CMyView::OnDraw(CDC* pDC)<
24、;/p><p><b> {</b></p><p> CMyDoc* pDoc = GetDocument();</p><p> ASSERT_VALID(pDoc);</p><p> pDC->SelectStockObject(LTGRAY_BRUSH); </p><p&
25、gt; for(int i=0; i<pDoc->GetListSize(); i++)</p><p> pDC->Ellipse(pDoc->GetBubble(i));</p><p><b> }</b></p><p><b> // 消息響應(yīng)函數(shù)</b></p>&
26、lt;p> void CMyView::OnLButtonDown(UINT nFlags, CPoint point)</p><p><b> {</b></p><p> CMyDoc* pDoc = GetDocument();// 取文檔指針</p><p> ASSERT_VALID(pDoc);</p>
27、;<p> int r = rand()%50+5;</p><p> CRect rectBubble(point.x-r, point.y-r, point.x+r, point.y+r);</p><p> pDoc->AddBubble(rectBubble);// 修改文檔數(shù)據(jù)</p><p> pDoc->Se
28、tModifiedFlag();</p><p> InvalidateRect(rectBubble, FALSE);//文檔數(shù)據(jù)產(chǎn)生變更后,要更新試圖數(shù)據(jù)</p><p><b> }</b></p><p> // 設(shè)置打印參數(shù)</p><p> BOOL CMyView::OnPreparePri
29、nting(CPrintInfo* pInfo)</p><p><b> {</b></p><p> pInfo->SetMaxPage(1); </p><p> return DoPreparePrinting(pInfo);</p><p><b> }</b></p
30、><p> // 框架窗口類 ////// </p><p> class CMainFrame : public CFrameWnd</p><p><b> {</b></p><p> DECLARE_DYNCREATE(CMainFrame)</p><p><b> };
31、</b></p><p> IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)</p><p> // 應(yīng)用程序類 // </p><p> #define IDR_MAINFRAME128</p><p> class CMyApp : public CWinApp</p&g
32、t;<p><b> {</b></p><p><b> public:</b></p><p> virtual BOOL InitInstance();</p><p> DECLARE_MESSAGE_MAP()</p><p><b> };</b&
33、gt;</p><p> BEGIN_MESSAGE_MAP(CMyApp, CWinApp)</p><p> ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)</p><p> ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)</p><p> ON
34、_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)</p><p> END_MESSAGE_MAP()</p><p> // 建立,登記文檔</p><p> BOOL CMyApp::InitInstance()</p><p><b> {</b&
35、gt;</p><p> CSingleDocTemplate* pDocTemplate;</p><p> pDocTemplate = new CSingleDocTemplate( // 登記文檔模板</p><p> IDR_MAINFRAME,</p><p> RUNTIME_CLASS(CMyDoc),</p&g
36、t;<p> RUNTIME_CLASS(CMainFrame),</p><p> RUNTIME_CLASS(CMyView));</p><p> AddDocTemplate(pDocTemplate);</p><p> CCommandLineInfo cmdInfo; // 創(chuàng)建及處理命令行信息 SDI</p>
37、<p> ParseCommandLine(cmdInfo);</p><p> if (!ProcessShellCommand(cmdInfo))</p><p> return FALSE;</p><p> m_pMainWnd->ShowWindow(SW_SHOW);</p><p> m_pMainW
38、nd->UpdateWindow();</p><p> return TRUE;</p><p><b> }</b></p><p> // 全局應(yīng)用程序?qū)ο?lt;/p><p> CMyApp theApp;</p><p><b> 資源腳本文件:</b>
39、</p><p> #include "afxres.h"</p><p> #define IDR_MAINFRAME128</p><p> IDR_MAINFRAME MENU PRELOAD DISCARDABLE </p><p><b> BEGIN</b></p>
40、<p> POPUP "網(wǎng)絡(luò)082 張?zhí)靽蹬菖莩绦蛟O(shè)計(jì)"</p><p><b> BEGIN</b></p><p> MENUITEM "新建(&N)\tCtrl+N", ID_FILE_NEW</p><p> MENUITEM "打開(&O).
41、..\tCtrl+O", ID_FILE_OPEN</p><p> MENUITEM "保存(&S)\tCtrl+S", ID_FILE_SAVE</p><p> MENUITEM "另存為(&A)...", ID_FILE_SAVE_AS</p><p> MENUITE
42、M SEPARATOR</p><p> MENUITEM "打印(&P)...\tCtrl+P", ID_FILE_PRINT</p><p> MENUITEM "打印預(yù)覽(&V)", ID_FILE_PRINT_PREVIEW</p><p> MENUITEM "打印設(shè)置(
43、&R)...", ID_FILE_PRINT_SETUP</p><p> MENUITEM SEPARATOR</p><p> MENUITEM "退出(&X)", ID_APP_EXIT</p><p><b> END</b></p><
44、;p><b> END</b></p><p> STRINGTABLE PRELOAD DISCARDABLE </p><p><b> BEGIN</b></p><p> IDR_MAINFRAME "吹泡泡\n\nBub\nBub 文件 (*.egg)\n.egg"</p
45、><p><b> END</b></p><p> #include "l.chs\\afxres.rc"</p><p> #include "l.chs\\afxprint.rc"</p><p><b> 三.調(diào)試分析 </b></p>
46、<p> 1.程序完成的功能及支持的數(shù)據(jù)類型:</p><p> 程序完成了在客戶區(qū)打開一窗口程序,并在其中任意位置點(diǎn)擊即可產(chǎn)生一隨機(jī)的圓形泡泡。在菜單欄可對(duì)文檔進(jìn)行保存,打印,預(yù)覽,設(shè)置,新建,打開等的功能。程序支持的數(shù)據(jù)類型:程序支持int型,bool型,(非true即false) 數(shù)組型。</p><p> 2,程序的性能分析:</p><p&
47、gt; 程序中一共用到4個(gè)類,即CMyApp、CMyWnd、CMyView和CMyDoc,它們分別是應(yīng)用程序類CWinApp、框架窗口類CFrameWnd、視圖類CView和文檔類CDocument的派生類。 </p><p> 文檔派生類CMyDoc用于管理吹泡泡程序的數(shù)據(jù),由于泡泡的數(shù)量是不定的,而大小和位置是通過int r = rand()%50+5;CRect rectBubble(point.x-
48、r, point.y-r, point.x+r, point.y+r);實(shí)現(xiàn)的,所以聲明了一個(gè)數(shù)組m_rectBubble來存放所有泡泡的數(shù)據(jù)。m_rectBubble是CMyDoc類的私有數(shù)據(jù)成員,在類外不可見;所以要定義一組成員函數(shù)作為該數(shù)據(jù)成員與外界的接口函數(shù)。函數(shù)GetListSize()用來統(tǒng)計(jì)數(shù)組中泡泡的個(gè)數(shù);函數(shù)GetBubble()用于從數(shù)組中取一個(gè)泡泡數(shù)據(jù);函數(shù)AddBubble()用于將一個(gè)泡泡的數(shù)據(jù)加入數(shù)組。 &l
49、t;/p><p> 視圖派生類的OnLButtonDown()函數(shù)用于響應(yīng)操作的鼠標(biāo)消息,OnDraw()函數(shù)是試圖標(biāo)準(zhǔn)輸出函數(shù),在框架窗口的客戶區(qū)輸出,應(yīng)用程序類設(shè)置了三個(gè)消息響應(yīng)宏,用于進(jìn)行文檔設(shè)置的菜單欄的選項(xiàng)。標(biāo)準(zhǔn)化的輸出函數(shù),不需要對(duì)這些消息響應(yīng)函數(shù)進(jìn)行重載。在應(yīng)用程序類的InitInstance()函數(shù)中建立了一個(gè)文檔模板。 </p><p> 3.上機(jī)過程出現(xiàn)的問題及解決方案
50、:</p><p> 最開始編制的程序只是單純的畫出泡泡,本應(yīng)顯示的菜單欄沒有出現(xiàn),也不能完成相應(yīng)的操作,查找關(guān)于MFC的相關(guān)資料和請(qǐng)教他人發(fā)現(xiàn),問題出在沒有將所建文檔與響應(yīng)的操作對(duì)應(yīng)聯(lián)系起來,后來設(shè)置了文檔指針CMyDoc* pDoc = GetDocument();各個(gè)操作都必須將文檔初始化后利用指針進(jìn)行關(guān)聯(lián),用pDoc->AddBubble(rectBubble);修改文檔數(shù)據(jù),在每次對(duì)文檔的打開,
51、關(guān)閉,創(chuàng)建新文檔前需進(jìn)行對(duì)視圖的更新操作。</p><p> 由于畫出的泡泡一開始沒有設(shè)置大小和位置范圍,在對(duì)程序進(jìn)行了多次運(yùn)行后出現(xiàn)了錯(cuò)誤,有時(shí)候會(huì)在文檔邊角出現(xiàn)半個(gè)或者不完整的泡泡,仔細(xì)分析發(fā)現(xiàn)是沒有對(duì)泡泡的半徑進(jìn)行限制,后來加入設(shè)置位置和大小的函數(shù),int r = rand()%50+5;CRect rectBubble(point.x-r, point.y-r, point.x+r, point.y+r
52、);重新運(yùn)行后解決了問題。</p><p> 4.程序中可以改進(jìn)的地方及說明:</p><p> 1. 在對(duì)文檔進(jìn)行打印預(yù)覽的時(shí)候,文檔中的泡泡出現(xiàn)在過于偏上的位置,用戶對(duì)文檔的內(nèi)容不能有很清楚的了解,修改一部分函數(shù),可以達(dá)到打印輸出與屏幕顯示的比例想接近。</p><p> 實(shí)現(xiàn)這個(gè)功能必須在CGraphicView類中重載虛函數(shù)OnPrepareDC()。
53、</p><p> 首先,在CGraphicView類的聲明中加上:</p><p> virtual void OnPrepareDC(CDC *pDC,CPrintInfo *pInfo=NULL);</p><p> 然后采用跟鼠標(biāo)響應(yīng)消息函數(shù)一樣的方法,設(shè)置映射模式。</p><p> void CGraphicView::O
54、nPrepareDC(CDC *pDC,CPrintInfo *pInfo){pDC->SetMapMode(MM_LOMETRIC);CView::OnPrepareDC(pDC,pInfo);}</p><p> 在修改消息映射函數(shù)OnLButtonDown(),</p><p> void CGraphicView::OnLButtonDown(UINT nFlag
55、s,CPoint point){CMyDoc* pDoc = GetDocument(); </p><p> ASSERT_VALID(pDoc);CClientDC dc(this); OnPrepareDC(&dc);int r = rand()%50+5; CRect rect(point.x-r,point.y-r,point.x+r,point.y+r);Invalidate
56、Rect(rect,FALSE); dc.DPtoLP(rect); pDoc->AddBubble(rect); pDoc->SetModifiedFlag(); }</p><p> 這樣打印預(yù)覽效果比較好,文檔基本顯示在打印紙中部。</p><p> 輸入輸出:用鼠標(biāo)左鍵在窗口客戶區(qū)吹泡泡。使用文件菜單中的打印選項(xiàng)可打印窗口圖象,圖象位于打印紙上部,比例恰當(dāng)
57、.分 析:由于OnDraw()函數(shù)輸出使用邏輯坐標(biāo),所以存儲(chǔ)數(shù)據(jù)(泡泡的包含矩形)也使用邏輯坐標(biāo)。在OnLButtonDown()函數(shù)中鼠標(biāo)位置參數(shù)point為物理坐標(biāo),首先據(jù)此生成泡泡的包含矩形(物理坐標(biāo)),更新窗口客戶區(qū)的相關(guān)區(qū)域(物理坐標(biāo)),然后將物理坐標(biāo)的泡泡包含矩形轉(zhuǎn)換為邏輯坐標(biāo)并存入文檔。CView類的虛函數(shù)OnPrepareDC()用于設(shè)置設(shè)備環(huán)境,其原型為:virtual void OnPrepareDC( CDC
58、* pDC,CPrintInfo* pInfo = NULL );其中參數(shù)pDC為指向設(shè)備環(huán)境的指針,pInfo為指向CPrintInfo類對(duì)象的指針。CPrintInfo類用來存放與打印有關(guān)的信息,其數(shù)據(jù)成員m_nCurPage為當(dāng)前打印頁的號(hào)碼;m_rectPage存放著當(dāng)前打印紙上的可打印區(qū)域。常用成員函數(shù)有:設(shè)置從第幾頁開始打印。其原型為:void SetMinPage( UINT nMinPage );其中參數(shù)nMin
59、Page為開</p><p> 2. 繪制五顏六色的泡泡</p><p> 1.在程序首部添加文件包含命令:#include <afxdlgs.h>2.在框架窗口類聲明中添加一個(gè)COLORREF類型的數(shù)組,存放各泡泡的顏色:COLORREF m_colorBubble [MAX_BUBBLE];3.修改鼠標(biāo)左鍵消息映射函數(shù),添加使用顏色選擇公用對(duì)話框的代碼:voi
60、d CMyWnd::OnLButtonDown ( UINT nFlags,CPoint point ){if(m_nBubbleCount < MAX_BUBBLE){m_colorBubble[m_nBubbleCount] = RGB(200,200,200);CColorDialog dlg(m_colorBubble[m_nBubbleCount]);if(dlg.DoModal() == IDOK)m_c
61、olorBubble[m_nBubbleCount] = dlg.GetColor();int r = rand()%50+10;CRect rect(point.x-r,point.y-r,point.x+r,point.y+r);m_rectBubble[</p><p> 5.程序中可以擴(kuò)充的功能及設(shè)計(jì)實(shí)現(xiàn)構(gòu)想:</p><p> 修改程序部分功能,希望實(shí)現(xiàn)在文檔區(qū)中央顯示
62、一個(gè)矩形的框,并在其中可以顯示某個(gè)你提前設(shè)置的字符。</p><p> 在原程序中向派生類CmyWnd中添加OnPaint()函數(shù)。函數(shù)中設(shè)置畫筆以及繪制矩形的長,寬的參數(shù)。還要設(shè)置控制矩形位置的參數(shù),可以將上,下,左,右的坐標(biāo)賦值,以此限定矩形在文檔中出現(xiàn)的位置。再添加字符串處理函數(shù),對(duì)要鍵入的字符進(jìn)行錄入。更進(jìn)一步的,可以在文檔中對(duì)顯示的字符進(jìn)行刪除,修改等的操作。這需要設(shè)置數(shù)組指針,存放字符數(shù)組,便于對(duì)其
63、進(jìn)行操作。由于程序中的鼠標(biāo)消息響應(yīng)函數(shù),所以,需設(shè)法將數(shù)組指針與消息宏映射聯(lián)系起來。</p><p><b> 四.用戶手冊(cè)</b></p><p><b> 1.運(yùn)行環(huán)境:</b></p><p> 操作系統(tǒng):windowXP</p><p> 開發(fā)軟件:Visual C++ 6.0<
64、;/p><p><b> 2.操作過程及演示</b></p><p> 1.)用戶首先打開VC++6.0運(yùn)行環(huán)境,在新建選項(xiàng)卡工程中選擇“win32 Application”,鍵入工程名,在新建文件中選擇選C++ source file鍵入文件名。</p><p><b> 2.)輸入源程序。</b></p>
65、<p> 3.)在新建選項(xiàng)卡中選擇資源腳本,鍵入名稱。將剛建立的資源文件關(guān)閉,然后使用菜單選項(xiàng)“File/Open”調(diào)出打開文件對(duì)話框,在其中選擇資源文件XX.rc,并在對(duì)話框底部的Open As組合框中選擇Text(以文本方式打開),按下“打開(O)”按鈕以文本方式重新打開資源文件。將原來的所有內(nèi)容刪除,替換為文本02.Txt的內(nèi)容。(02.txt內(nèi)容見附錄)。在菜單欄工程欄選擇設(shè)置,在常規(guī)選項(xiàng)卡下選擇“使用MFC作為
66、共享的DLL”。如圖</p><p> 4.)運(yùn)行程序,出現(xiàn)畫出泡泡的界面。鼠標(biāo)左鍵點(diǎn)擊隨即畫出圓形泡泡,大小隨機(jī)。使用顏色設(shè)置對(duì)話框選擇改變泡泡顏色。完成后可以對(duì)文檔進(jìn)行新建,打開,保存,另存等的操作。至此,程序運(yùn)行結(jié)束。</p><p><b> 3.運(yùn)行結(jié)果</b></p><p><b> 程序截圖如下:</b&g
67、t;</p><p><b> 畫泡泡:</b></p><p><b> 保存:</b></p><p> 打印預(yù)覽(可以改進(jìn))</p><p><b> 關(guān)閉,新建:</b></p><p><b> 五.設(shè)計(jì)總結(jié)</b&g
68、t;</p><p> 此次課程設(shè)計(jì)的內(nèi)容為在客戶區(qū)實(shí)現(xiàn)吹泡泡的功能,程序的完成需要用到數(shù)組,類,派生,重載,以及封裝,內(nèi)聯(lián)函數(shù),以及對(duì)消息響應(yīng)函數(shù)的了解和簡單操作。MFC中用包含矩形表示。需要設(shè)置一數(shù)組,每當(dāng)用戶按下鼠標(biāo)左鍵時(shí),就產(chǎn)生一個(gè)泡泡的數(shù)據(jù)存入數(shù)組中。</p><p> 首先程序中需設(shè)置一個(gè)存放所有泡泡的包含矩形的數(shù)組m_rectBubble。m_rectBubble設(shè)置為類
69、CMyDoc的私有數(shù)據(jù)成員。函數(shù)函數(shù)GetBubble()用于從數(shù)組中取一個(gè)泡泡的包含矩形;函數(shù)AddBubble()用于將一個(gè)泡泡的包含矩形加入數(shù)組。以上為對(duì)泡泡數(shù)據(jù)的存放與處理過程。由于是首次接觸MFC編程,MFC的封裝性能使程序的書寫變得很簡單,但同時(shí)增加了理解難度,找了很多關(guān)于MFC的資料和視頻學(xué)習(xí)基本的類和派生,更重要的是它的消息響應(yīng)函數(shù)的實(shí)現(xiàn)功能;可視化的編程界面友好,清晰而美觀。通過吹泡泡的課程設(shè)計(jì),總結(jié)了一點(diǎn)經(jīng)驗(yàn),一開始
70、的程序只能實(shí)現(xiàn)單純的吹泡泡,因?yàn)橛辛耍停疲玫膹?qiáng)大的擴(kuò)展功能,在一個(gè)簡單的程序中修改添加響應(yīng)函數(shù),進(jìn)一步實(shí)現(xiàn)了保存等的菜單功能,在此基礎(chǔ)上,程序可以實(shí)現(xiàn)更多的功能,MFC為此提供了很好的平臺(tái)。在兩周的學(xué)習(xí)中,時(shí)間緊迫,有點(diǎn)手忙腳亂,程序做的也不盡人意,還有很多要改進(jìn)和完善的地方。最大的收獲是學(xué)習(xí)了新的編程知識(shí),擴(kuò)展了視野。自己學(xué)習(xí)的過程,對(duì)產(chǎn)生的錯(cuò)誤需要多方查證才能進(jìn)行改善,這樣比平時(shí)更加深了對(duì)知識(shí)的理解與掌握力。對(duì)學(xué)習(xí)是很好的鞏固和提高
71、。</p><p> 由于對(duì)MFC來說我還是個(gè)初學(xué)者,一開始照著資料慢慢的測試運(yùn)行,很多東西只看懂形勢(shì)而不懂意義。在調(diào)試與實(shí)現(xiàn)的過程中逐步開始對(duì)程序有了深入的認(rèn)識(shí),逐漸熟練并掌握了它的編程方法。對(duì)各種控制結(jié)構(gòu)及語句、數(shù)組的基本與高級(jí)應(yīng)用、指針數(shù)組、字符數(shù)組、動(dòng)態(tài)數(shù)組、函數(shù)的定義、調(diào)用方式;函數(shù)在編程中的具體應(yīng)用;以及變量存儲(chǔ)特征與標(biāo)識(shí)符的作用域,通過實(shí)踐,使我在這些方面有了認(rèn)識(shí)和提高。課程設(shè)計(jì)它是一項(xiàng)任務(wù),更是
72、一種挑戰(zhàn)和歷練。在課程設(shè)計(jì)中,為了使用時(shí)方便,著重對(duì)不足方面的知識(shí)進(jìn)行了分析與理解,在這一過程中對(duì)文件的操作有了很大的提高。通過實(shí)際的演練,可以增強(qiáng)對(duì)知識(shí)的理解和運(yùn)用能力。</p><p> 大體上對(duì)MFC有個(gè)了解,知道它的概念、組成,從較簡單的類入手,由淺入深,循序漸進(jìn)、不斷學(xué)習(xí)。一開始使用MFC提供的類時(shí),只了解了它的一些常用的方法、外部接口,它的細(xì)節(jié)和內(nèi)部實(shí)現(xiàn)比較復(fù)雜,把它當(dāng)做一個(gè)模塊來用,學(xué)會(huì)了一種抽象
73、的學(xué)習(xí)方法。在學(xué)到一定程度時(shí),再稍微深入研究,采用繼承的方法對(duì)原有的類的行為進(jìn)行修改和擴(kuò)充,派生出自己所需的類。在研究MFC的類時(shí),MSDN內(nèi)的幫助信息對(duì)我提供了重要的幫助。 學(xué)習(xí)MFC,我感受到很重要的一點(diǎn)是學(xué)會(huì)理解MFC應(yīng)用程序的框架結(jié)構(gòu),而不是強(qiáng)迫記憶大量的類成員、方法及其參數(shù)等細(xì)節(jié)。這樣不斷再繼續(xù)研究學(xué)習(xí),進(jìn)一步對(duì)MFC的使用方法達(dá)到深入的掌握。</p><p> 這次歷時(shí)兩周的課程設(shè)計(jì),發(fā)現(xiàn)自己有很多
74、不足,自己有很多知識(shí)漏洞,看到了自己的實(shí)踐經(jīng)驗(yàn)比較缺乏,理論聯(lián)系實(shí)際的能了還需要提高。但在實(shí)際動(dòng)手的過程中,學(xué)到了比在課本上還深刻的理論和實(shí)際操作知識(shí),積累了寶貴的經(jīng)驗(yàn),這為以后的學(xué)習(xí)進(jìn)步提供了借鑒和基礎(chǔ)。</p><p> C++課程設(shè)計(jì)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)重要的實(shí)踐性教學(xué)環(huán)節(jié)之一,本次設(shè)計(jì)結(jié)合實(shí)際應(yīng)用的要求,使課程設(shè)計(jì)既覆蓋C++的知識(shí)點(diǎn),又接近工程實(shí)際需要。目的是通過課程設(shè)計(jì)的綜合訓(xùn)練,培養(yǎng)我們實(shí)際分析
75、問題、解決問題的能力,以及編程和動(dòng)手能力,最終目標(biāo)是通過課程設(shè)計(jì)這種形式,幫助自身系統(tǒng)掌握C++這門課程的主要內(nèi)容,養(yǎng)成良好的編程習(xí)慣,更好的完成教學(xué)任務(wù)。</p><p><b> 六.附錄</b></p><p> #include <afxwin.h></p><p> #include <afxext.h>
76、</p><p> #include <afxtempl.h></p><p> #include "afxres.h"</p><p> #include "l.chs\\afxres.rc"</p><p> #include "l.chs\\afxprint.rc&q
77、uot;</p><p><b> 吹泡泡.cpp</b></p><p><b> 吹泡泡.rc</b></p><p><b> 七.主要參考文獻(xiàn):</b></p><p> 1.鄭莉.C++語言程序設(shè)計(jì)(第3版).北京:清華大學(xué)出版社,2005.7</p&g
78、t;<p> 2.錢能.C++程序設(shè)計(jì)教程(第2版).北京:清華大學(xué)出版社,2005.8</p><p> 3. 黃維通. Visual C++面向?qū)ο笈c可視化程序設(shè)計(jì)(第2版).北京:清華大學(xué)出版社,2003.12</p><p> 4. 劉路放. Visual C++與面向?qū)ο蟪绦蛟O(shè)計(jì)教程(第二版). 北京:高等教育出版社,2007.8</p><
溫馨提示
- 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)論