實(shí)驗(yàn)五MFC進(jìn)行可視化編程_第1頁(yè)
實(shí)驗(yàn)五MFC進(jìn)行可視化編程_第2頁(yè)
實(shí)驗(yàn)五MFC進(jìn)行可視化編程_第3頁(yè)
實(shí)驗(yàn)五MFC進(jìn)行可視化編程_第4頁(yè)
實(shí)驗(yàn)五MFC進(jìn)行可視化編程_第5頁(yè)
已閱讀5頁(yè),還剩5頁(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、實(shí)驗(yàn)五 MFC進(jìn)行可視化編程一、實(shí)驗(yàn)?zāi)康呐c要求了解MFC類(lèi)的層次結(jié)構(gòu)及主要類(lèi)的用法,掌握使用MFC和向?qū)?lái)編寫(xiě)Windows應(yīng)用程序。要求:(1)掌握MFC類(lèi)的層次結(jié)構(gòu)及主要類(lèi)的用法。(2)使用應(yīng)用程序向?qū)?chuàng)建MFC類(lèi)的Windows應(yīng)用程序。二、基本知識(shí)點(diǎn)類(lèi)的概念。MFC類(lèi)的層次結(jié)構(gòu)。MFC類(lèi)主要的類(lèi)的用法。應(yīng)用程序向?qū)У膽?yīng)用方法。三、實(shí)驗(yàn)設(shè)備與平臺(tái) 實(shí)驗(yàn)設(shè)備要求每個(gè)學(xué)生一臺(tái)電腦,其中運(yùn)行C+程序環(huán)境為VC+ 6.0系統(tǒng)或新版。四、實(shí)驗(yàn)內(nèi)容:實(shí)驗(yàn)一、本實(shí)驗(yàn)主要掌握VC+的一種編程方法,利用MFC(Microsoft Foundation Class)和向?qū)В╓izard)來(lái)編寫(xiě)Windows

2、應(yīng)用程序,即首先使用Class Wizard來(lái)生成Windows應(yīng)用程序的基本框架,然后用Class Wizard 來(lái)建立應(yīng)用程序的類(lèi)、消息處理、數(shù)據(jù)處理函數(shù)或定義控件的屬性、事件及方法,最后把各應(yīng)用程序所要求的功能添加到類(lèi)中,這種編寫(xiě)程序的方法編寫(xiě)代碼工作量小,系統(tǒng)自動(dòng)生成了一些代碼,從而編寫(xiě)起來(lái)方便。MFC是用來(lái)編寫(xiě)Windows應(yīng)用程序的VC+類(lèi)集,該類(lèi)集以層次結(jié)構(gòu)組織起來(lái),其中封裝了大部分Windows API函數(shù),它所包含的功能涉及到整個(gè)Windows操作系統(tǒng)。MFC類(lèi)庫(kù)是以層次結(jié)構(gòu)的方式組織起來(lái)的,它的類(lèi)按層次關(guān)系主要可劃分為如下幾類(lèi):根類(lèi)、應(yīng)用程序體系結(jié)構(gòu)類(lèi)、可視對(duì)象類(lèi)、通用類(lèi)、

3、OLE類(lèi)及ODBC數(shù)據(jù)庫(kù)類(lèi)。應(yīng)用程序向?qū)槌绦騿T提供了一個(gè)基于MFC的應(yīng)用程序框架,用戶在此基礎(chǔ)上添加實(shí)現(xiàn)特定功能的代碼即可。實(shí)驗(yàn)題目:用MFC的向?qū)?chuàng)建編輯框,在編輯框中實(shí)現(xiàn)算術(shù)“加”、“減”、“乘”及“除”的運(yùn)算,界面如圖13-1所示。圖13-1 具有“加”、“減”、“乘”及“除”運(yùn)算功能的界面實(shí)驗(yàn)步驟:1、利用MFC向?qū)Ы⒊绦蚩蚣?,在MFC AppWizard Step1中選擇Dialog based。其余都采用默認(rèn)選項(xiàng)。這樣建立了一個(gè)基于對(duì)話框的程序。2、利用資源編輯器,建立對(duì)話框:在Resource View 選項(xiàng)卡中打開(kāi)Dialog資源組,由于程序的文件名為editor, 因此,

4、系統(tǒng)自動(dòng)產(chǎn)生一個(gè)名為IDD_editor_DIALOG的資源文件,在ResourceView資源組框中雙擊IDD_editor_DIALOG,如圖13-2所示。然后在右邊的窗口中顯示出待編輯的對(duì)話框。根據(jù)如圖13-1所示的樣式建立對(duì)話框。圖13-2 ResourceView資源組框下面以“數(shù)據(jù)1”編輯框和“加”按鈕為例介紹控件的創(chuàng)建過(guò)程,其余的編輯框和按鈕可參照此操作:(1) 在控件工具欄中選擇“編輯框”,在控件工具上單擊鼠標(biāo)左鍵,在如圖13-1所示的對(duì)話框編輯窗口上“數(shù)據(jù)1”編輯框的位置上,畫(huà)出一個(gè)大小合適的編輯框。然后在對(duì)話框上單擊鼠標(biāo)右鍵,對(duì)該編輯框上的Properties屬性進(jìn)行設(shè)置,

5、如圖13-3所示,設(shè)置對(duì)話框的ID屬性。圖13-3 Edit Properties對(duì)話框(2) 在圖13-1的“加”按鈕的位置上,畫(huà)出一個(gè)大小合適的下壓式按鈕。設(shè)置該按鈕的Properties選項(xiàng),如圖13-4所示,設(shè)置該控件的ID值和Caption屬性。圖13-4 按鈕“加”的屬性設(shè)置按照上面的操作過(guò)程編輯各按鈕或編輯框等對(duì)象的屬性。見(jiàn)表13-1所示。表13-1 對(duì)象屬性表對(duì)象IDCaption編輯框IDC_ITEM1_EDIT編輯框IDC_ITEM1_EDIT編輯框IDC_RESULT _EDIT按鈕IDC_ADD_BUTTONAdd按鈕IDC_DIFFERENCE_BUTTONDiffe

6、rence按鈕IDC_MULTIPLY_BUTTONMultiply按鈕IDC_DEVIDE_BUTTONDevide按鈕IDC_EXIT_BUTTONExit(3) 添加代碼1)給編輯框連接變量:在任何一個(gè)編輯框上單擊鼠標(biāo)右鍵,設(shè)置ClassWizard菜單項(xiàng),彈出MFC Class Wizard對(duì)話框,選擇Member Variables 選項(xiàng)卡。然后在Control IDs 列表框中,選中IDC_ITEM1_EDIT,單擊Add Variable按鈕,在彈出的對(duì)話框中連接變量m_Item1_Edit;同樣的方法添加其它變量。2)給四個(gè)按鈕連接代碼: 在“加”按鈕上單擊鼠標(biāo)右鍵,選擇Cla

7、ssWizard,在彈出的對(duì)話框中選擇Message Maps選項(xiàng)卡,在Object IDs列表框中選擇IDC_ADD_BUTTON,在Messages列表框中選擇BN_CLICKED選項(xiàng),即選擇單擊按鈕事件。單擊右邊的Add Function按鈕,在彈出的對(duì)話框中接受默認(rèn)的名字,執(zhí)行結(jié)果如圖13-6所示。單擊Edit Code 按鈕,此時(shí)顯示源代碼文件,在函數(shù)OnAddButton()中輸入相應(yīng)代碼。圖13-6 為按鈕連接代碼void CEditorDlg:OnAddButton() /此處填寫(xiě)加法的代碼。3)同樣的可以給“減”、“乘”、“除”按鈕連接代碼,不同的是消息映射函數(shù)中執(zhí)行減、乘及

8、除的操作。減的操作代碼:void CEditorDlg:OnDifferenceButton() /此處填寫(xiě)減的代碼。乘的操作代碼:void CEditorDlg:OnMultiplyButton() /此處填寫(xiě)乘的代碼。除的操作代碼:void CEditorDlg:OnDevideButton() /此處填寫(xiě)除的代碼。4)給“退出“按鈕連接代碼,利用ClassWizard將按鈕消息BN_CLICKED加到函數(shù)OnExitButton( )中,例如下列代碼:void CEditorDlg:OnExitButton() OnOK();3、建立并運(yùn)行程序運(yùn)行后該編輯框能實(shí)現(xiàn)“加”、“減”、“乘”及

9、“除”的運(yùn)算。如圖13-7所示。圖13-7 實(shí)現(xiàn)“加”、“減”、“乘”及“除”的運(yùn)算實(shí)驗(yàn)二、 本實(shí)驗(yàn)的主要內(nèi)容是文檔與視圖,主要是關(guān)于用AppWizard和MFC 類(lèi)庫(kù)所寫(xiě)程序用到文檔與視圖的結(jié)構(gòu),文檔和視圖是MFC應(yīng)用程序最主要的對(duì)象。文檔用于管理應(yīng)用程序的數(shù)據(jù),視圖用于顯示文檔管理和用戶的交互。定義和操縱數(shù)據(jù)的代碼在文檔類(lèi)中實(shí)現(xiàn),而顯示數(shù)據(jù)并解釋用戶的代碼則在視圖類(lèi)中實(shí)現(xiàn)。文檔類(lèi)和視圖類(lèi)的交互式通過(guò)這兩類(lèi)中的成員函數(shù)實(shí)現(xiàn)的。CDocument類(lèi)是所有文檔的基類(lèi),提供了用戶自定義文檔類(lèi)的基本功能。CView類(lèi)則是所有視圖類(lèi)的基類(lèi),提供了用戶自定義視圖類(lèi)的框架。文檔和視圖類(lèi)的關(guān)系如圖14-1所

10、示。通過(guò)指針調(diào)用文檔類(lèi)的成員函數(shù)從文檔中讀取數(shù)據(jù)視窗對(duì)象用戶通過(guò)文檔類(lèi)的成員函數(shù)通過(guò)視圖類(lèi)的成員函數(shù)或取指向文檔類(lèi)的指針通過(guò)視圖類(lèi)的成員函數(shù)顯示文檔中的數(shù)據(jù),并獲取用戶的輸入指向文檔對(duì)象的指針文檔對(duì)象磁盤(pán)文件或網(wǎng)絡(luò)數(shù)據(jù)等介質(zhì)圖14-1 文檔/視圖結(jié)構(gòu)關(guān)系圖實(shí)驗(yàn)題目:利用文檔/視圖結(jié)構(gòu)創(chuàng)建一個(gè)繪圖板,使其能繪畫(huà)各種直線,具有新建空白窗口,重畫(huà)窗口時(shí)可以恢復(fù)直線等功能。實(shí)驗(yàn)步驟:創(chuàng)建應(yīng)用程序的基本框架使用MFC AppWizard來(lái)建立應(yīng)用程序的基本框架,設(shè)置該P(yáng)roject的名字為“MyExam”。 并且在“MFC AppWizard-Step1”對(duì)話框中選擇“Single document”選

11、項(xiàng),表示要生成SDI應(yīng)用程序。2. 視圖的處理(1) 在視圖類(lèi)中添加數(shù)據(jù)成員首先,打開(kāi)文件MyExamView.h, 將以下語(yǔ)句添加到MyExamView類(lèi)定義中:protected:int m_Draw;HCURSOR m_Hcursor;CPoint m_pOld;CPoint m_pOrigin;接著,打開(kāi)文件MyExamView.cpp,將以下代碼添加到CmyExamView類(lèi)的構(gòu)造函數(shù)中,以便初始化數(shù)據(jù)成員m_Draw和m_Hcursor:m_Draw=0;m_Hcursor=AfxGetApp()-LoadStandardCursor(IDC_CROSS);用ClassWizard

12、映射鼠標(biāo)消息從“View”菜單選擇“ClassWizard”命令,彈出“MFC ClassWizard”對(duì)話框,選擇“Message Maps”選項(xiàng)卡。從“Class name”中選擇類(lèi)名“CMyExamView”。在“Object IDs”中選擇“CMyExamView” 。在“Messages”中選擇要映射的鼠標(biāo)消息為WM_LBUTTONDOWN (單擊鼠標(biāo)左鍵),然后單擊“Add Function”按鈕。重復(fù)(4),映射鼠標(biāo)消息WM_MOUSEMOVE(移動(dòng)鼠標(biāo)到新的位置)和WM_LBUTTONUP(釋放鼠標(biāo)左鍵)。結(jié)果如圖14-2所示。圖14-2 映射鼠標(biāo)消息后的結(jié)果添加消息處理函數(shù)代

13、碼在消息處理函數(shù)CMyExamView:OnLButtonDown中添加一下代碼:m_pOld=point;m_pOrigin=point;SetCapture();m_Draw=1;RECT rect;GetClientRect(&rect);ClientToScreen(&rect);ClipCursor(&rect);2)在消息處理函數(shù)CMyExamView:OnMouseMove中添加一下代碼:SetCursor(m_Hcursor);if(m_Draw)CClientDC dc(this);dc.SetROP2(R2_NOT);dc.MoveTo(m_pOrigin);dc.Line

14、To(m_pOld);dc.MoveTo(m_pOrigin);dc.LineTo(point);m_pOld=point; 在消息處理函數(shù)CMyExamView:OnLButtonUp中添加一下代碼:if(m_Draw)m_Draw=0;ReleaseCapture();ClipCursor(NULL);圖14-3 運(yùn)行MyExam應(yīng)用程序并畫(huà)各種直線建立并運(yùn)行程序運(yùn)行結(jié)果如圖14-3所示,可以用鼠標(biāo)畫(huà)各種直線后的結(jié)果。3、文檔的處理 對(duì)于用戶在視圖窗口中所畫(huà)的直線,可以在文檔類(lèi)中添加數(shù)據(jù)成員來(lái)存放直線的坐標(biāo),以便在重畫(huà)窗口時(shí)可以恢復(fù)直線。(1) 在文檔中存放直線坐標(biāo)。1) 在文檔類(lèi)頭文件M

15、yExamDoc.h中添加類(lèi)CMyLine來(lái)存放直線的坐標(biāo)。class CMyLine : public CObjectprotected:int m_StartX; int m_StartY; int m_EndX; int m_EndY;public:CMyLine(int StartX, int StartY,int EndX, int EndY);void DrawLine(CDC*pDC);2) 在文檔類(lèi)頭文件MyExamDoc.h中添加成員函數(shù),以便其他類(lèi)能夠處理文檔的數(shù)據(jù)成員。protected:CObArray m_ObArray;public:void AddLine(int

16、 StartX, int StartY,int EndX,int EndY);CMyLine *GetLine(int index);int GetTotalLine();在文檔類(lèi)頭文件MyExamDoc.cpp中添加成員函數(shù)的定義CMyLine:CMyLine(int StartX, int StartY,int EndX, int EndY) m_StartX=StartX; m_StartY=StartY; m_EndX=EndX; m_EndY=EndY;void CMyLine:DrawLine(CDC*pDC) pDC-MoveTo(m_StartX,m_StartY); pDC-

17、LineTo(m_EndX,m_EndY);void CMyExamDoc:AddLine(int StartX, int StartY,int EndX,int EndY)CMyLine *pMyLine = new CMyLine(StartX, StartY,EndX, EndY);m_ObArray. Add(pMyLine);CMyLine*CMyExamDoc:GetLine(int index)if(indexm_ObArray.GetUpperBound()return 0;return(CMyLine*)m_ObArray.GetAt(index);int CMyExamDo

18、c:GetTotalLine()return m_ObArray.GetSize();(2) 畫(huà)完直線后存放直線坐標(biāo)在消息處理函數(shù)CMyExamView:OnLButtonUp中添加一下代碼,以便在畫(huà)完直線釋放鼠標(biāo)時(shí)存放直線的坐標(biāo): CMyExamDoc *pDoc=GetDocument();pDoc-AddLine(m_pOrigin.x,m_pOrigin.y,point.x,point.y);(3) 修改視圖的OnDraw成員函數(shù)。 為了使視圖窗口重新繪制時(shí),可以根據(jù)存放在文檔類(lèi)中的數(shù)據(jù)來(lái)恢復(fù)直線,有必要往OnDraw函數(shù)中添加一下代碼:int index;index=pDoc-GetTotalLine();while(index-)pDoc-GetLine(index)-DrawLine(pDC);(4) 刪除文檔數(shù)據(jù) 初始化新文檔之前,必須要?jiǎng)h除存放在當(dāng)前文檔中的數(shù)據(jù),在文檔類(lèi)的頭文件MyExamDoc.h中添加一下代碼: virtual void DeleteContents();接著,在文檔類(lèi)的實(shí)現(xiàn)文件MyExamDoc.cpp中添加

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論