實驗五MFC進行可視化編程_第1頁
實驗五MFC進行可視化編程_第2頁
實驗五MFC進行可視化編程_第3頁
實驗五MFC進行可視化編程_第4頁
實驗五MFC進行可視化編程_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、實驗五 MFC進行可視化編程一、實驗目的與要求了解MFC類的層次結構及主要類的用法,掌握使用MFC和向導來編寫Windows應用程序。要求:(1)掌握MFC類的層次結構及主要類的用法。(2)使用應用程序向導創(chuàng)建MFC類的Windows應用程序。二、基本知識點類的概念。MFC類的層次結構。MFC類主要的類的用法。應用程序向導的應用方法。三、實驗設備與平臺 實驗設備要求每個學生一臺電腦,其中運行C+程序環(huán)境為VC+ 6.0系統(tǒng)或新版。四、實驗內容:實驗一、本實驗主要掌握VC+的一種編程方法,利用MFC(Microsoft Foundation Class)和向導(Wizard)來編寫Windows

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

3、OLE類及ODBC數(shù)據(jù)庫類。應用程序向導為程序員提供了一個基于MFC的應用程序框架,用戶在此基礎上添加實現(xiàn)特定功能的代碼即可。實驗題目:用MFC的向導創(chuàng)建編輯框,在編輯框中實現(xiàn)算術“加”、“減”、“乘”及“除”的運算,界面如圖13-1所示。圖13-1 具有“加”、“減”、“乘”及“除”運算功能的界面實驗步驟:1、利用MFC向導建立程序框架,在MFC AppWizard Step1中選擇Dialog based。其余都采用默認選項。這樣建立了一個基于對話框的程序。2、利用資源編輯器,建立對話框:在Resource View 選項卡中打開Dialog資源組,由于程序的文件名為editor, 因此,

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

5、如圖13-3所示,設置對話框的ID屬性。圖13-3 Edit Properties對話框(2) 在圖13-1的“加”按鈕的位置上,畫出一個大小合適的下壓式按鈕。設置該按鈕的Properties選項,如圖13-4所示,設置該控件的ID值和Caption屬性。圖13-4 按鈕“加”的屬性設置按照上面的操作過程編輯各按鈕或編輯框等對象的屬性。見表13-1所示。表13-1 對象屬性表對象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)給編輯框連接變量:在任何一個編輯框上單擊鼠標右鍵,設置ClassWizard菜單項,彈出MFC Class Wizard對話框,選擇Member Variables 選項卡。然后在Control IDs 列表框中,選中IDC_ITEM1_EDIT,單擊Add Variable按鈕,在彈出的對話框中連接變量m_Item1_Edit;同樣的方法添加其它變量。2)給四個按鈕連接代碼: 在“加”按鈕上單擊鼠標右鍵,選擇Cla

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

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

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

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

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

12、映射鼠標消息從“View”菜單選擇“ClassWizard”命令,彈出“MFC ClassWizard”對話框,選擇“Message Maps”選項卡。從“Class name”中選擇類名“CMyExamView”。在“Object IDs”中選擇“CMyExamView” 。在“Messages”中選擇要映射的鼠標消息為WM_LBUTTONDOWN (單擊鼠標左鍵),然后單擊“Add Function”按鈕。重復(4),映射鼠標消息WM_MOUSEMOVE(移動鼠標到新的位置)和WM_LBUTTONUP(釋放鼠標左鍵)。結果如圖14-2所示。圖14-2 映射鼠標消息后的結果添加消息處理函數(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 運行MyExam應用程序并畫各種直線建立并運行程序運行結果如圖14-3所示,可以用鼠標畫各種直線后的結果。3、文檔的處理 對于用戶在視圖窗口中所畫的直線,可以在文檔類中添加數(shù)據(jù)成員來存放直線的坐標,以便在重畫窗口時可以恢復直線。(1) 在文檔中存放直線坐標。1) 在文檔類頭文件M

15、yExamDoc.h中添加類CMyLine來存放直線的坐標。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) 在文檔類頭文件MyExamDoc.h中添加成員函數(shù),以便其他類能夠處理文檔的數(shù)據(jù)成員。protected:CObArray m_ObArray;public:void AddLine(int

16、 StartX, int StartY,int EndX,int EndY);CMyLine *GetLine(int index);int GetTotalLine();在文檔類頭文件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) 畫完直線后存放直線坐標在消息處理函數(shù)CMyExamView:OnLButtonUp中添加一下代碼,以便在畫完直線釋放鼠標時存放直線的坐標: CMyExamDoc *pDoc=GetDocument();pDoc-AddLine(m_pOrigin.x,m_pOrigin.y,point.x,point.y);(3) 修改視圖的OnDraw成員函數(shù)。 為了使視圖窗口重新繪制時,可以根據(jù)存放在文檔類中的數(shù)據(jù)來恢復直線,有必要往OnDraw函數(shù)中添加一下代碼:int index;index=pDoc-GetTotalLine();while(index-)pDoc-GetLine(index)-DrawLine(pDC);(4) 刪除文檔數(shù)據(jù) 初始化新文檔之前,必須要刪除存放在當前文檔中的數(shù)據(jù),在文檔類的頭文件MyExamDoc.h中添加一下代碼: virtual void DeleteContents();接著,在文檔類的實現(xiàn)文件MyExamDoc.cpp中添加

溫馨提示

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

評論

0/150

提交評論