版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單文檔程序結(jié)構(gòu)第1頁,課件共41頁,創(chuàng)作于2023年2月基于MFC進行應(yīng)用開發(fā)使用VC++的應(yīng)用程序向?qū)FCAppWizard可以開發(fā):單文檔Singledocument
多文檔Multipledocument對話框Dialogbased三種類型的應(yīng)用程序。本講開始學(xué)習單文檔應(yīng)用程序的開發(fā)技術(shù)2第2頁,課件共41頁,創(chuàng)作于2023年2月單文檔應(yīng)用案例1的程序運行界面3第3頁,課件共41頁,創(chuàng)作于2023年2月本講主要內(nèi)容利用向?qū)Ы⒁粋€單文檔應(yīng)用程序框架向?qū)傻暮诵念惣捌涔δ芪臋n/視圖文字的顯示菜單4第4頁,課件共41頁,創(chuàng)作于2023年2月單文檔案例1——文本顯示案例利用MFC建立一個單文檔應(yīng)用程序,用于在客戶區(qū)顯示文本。程序的主要功能包括:使用菜單命令按照指定文本內(nèi)容和坐標位置在客戶區(qū)顯示文本保存文本內(nèi)容等。5第5頁,課件共41頁,創(chuàng)作于2023年2月利用向?qū)Ы⒁粋€單文檔應(yīng)用程序框架【例9-1】利用MFCAppWizard[exe]向?qū)梢粋€SDI單文檔應(yīng)用程序MyTextOut。6第6頁,課件共41頁,創(chuàng)作于2023年2月【編程步驟】(1)在VisualC++IDE中執(zhí)行File|New命令,打開New對話框。在項目類型列表框中選擇MFCAppWizard[exe]項,在Projectname框中輸入項目名稱,本例為MyTextOut。選擇好合適的路徑。(2)在MFCAppWizard-Step1對話框中選擇Singledocument項,向?qū)?chuàng)建一個單文檔應(yīng)用程序框架,在本例中,以下的各個步驟使用向?qū)峁┑哪J選項即可。利用向?qū)Ы⒁粋€單文檔應(yīng)用程序框架7第7頁,課件共41頁,創(chuàng)作于2023年2月利用向?qū)Ы⒁粋€單文檔應(yīng)用程序框架編譯、連接、運行MFCAppWizard[exe]向?qū)?chuàng)建的應(yīng)用程序MyTextOut。運行結(jié)果如圖所示??蚣埽ú藛螜凇⒐ぞ邫?、狀態(tài)欄)客戶區(qū)單文檔程序要包含文檔,并且一次只能打開一個文檔,其框架是指菜單欄、工具欄、狀態(tài)欄等界面元素,客戶區(qū)則用于展示用戶文檔。8第8頁,課件共41頁,創(chuàng)作于2023年2月向?qū)傻暮诵念惣捌涔δ躆FC應(yīng)用程序框架實質(zhì)上是一個標準的Windows應(yīng)用程序,它具有標準的窗口、菜單欄和工具欄。MFCAppWizard[exe]向?qū)橐话愕腟DI應(yīng)用程序生成了五個核心類,它們分別是:應(yīng)用程序類CMyTextOutApp框架窗口類CMainFrame文檔類CMyTextOutDoc視圖類CMyTextOutView文檔模板類CSingleDocTemplate9第9頁,課件共41頁,創(chuàng)作于2023年2月向?qū)傻暮诵念惣捌涔δ芤话銘?yīng)用程序框架中所有類的名字由MFCAppWizard[exe]向?qū)Ц鶕?jù)一定的規(guī)則自動命名。應(yīng)用程序框架中類(框架窗口類例外)的命名規(guī)則一般遵照如下要求:ClassName=C+ProjectName+ClassType10第10頁,課件共41頁,創(chuàng)作于2023年2月向?qū)傻暮诵念惣捌涔δ?.應(yīng)用程序類CMyTextOutAppCMyTextOutApp類是MFC的CWinApp類的派生類。它的主要功能有:應(yīng)用程序的初始化;程序的啟動;程序運行結(jié)束時的清理工作。應(yīng)用程序?qū)ο髏heApp是一個唯一的全局變量,它的主要功能是通過調(diào)用WinMain()主函數(shù)啟動程序的運行。MFC應(yīng)用程序框架也有一個作為程序入口點的WinMain()主函數(shù),但在源程序中看不見該函數(shù),它在MFC中已定義好并同應(yīng)用程序相鏈接。11第11頁,課件共41頁,創(chuàng)作于2023年2月向?qū)傻暮诵念惣捌涔δ?.框架窗口類CMainFrameCMainFrame類是MFC的CFrameWnd類的派生類。它主要負責創(chuàng)建標題欄、菜單欄、工具欄和狀態(tài)欄。不同的SDI應(yīng)用程序,其框架窗口類名和文件名是統(tǒng)一的。CMainFrame類中聲明了框架窗口中的工具欄m_wndToolBar、狀態(tài)欄m_wndStatusBar兩個成員變量和四個成員函數(shù)。12第12頁,課件共41頁,創(chuàng)作于2023年2月向?qū)傻暮诵念惣捌涔δ?.文檔類CMyTextOutDoc類CMyTextOutDoc是MFC的CDocument類的派生類,它用于管理和維護數(shù)據(jù),包括應(yīng)用程序數(shù)據(jù)的保存和裝載,實現(xiàn)文檔的序列化功能。4.視圖類CMyTextOutView類CMyTextOutView是MFC的CView類的派生類,它主要負責客戶區(qū)文檔數(shù)據(jù)的顯示,以及如何進行人機交互。13第13頁,課件共41頁,創(chuàng)作于2023年2月向?qū)傻暮诵念惣捌涔δ?.文檔模板類CSingleDocTemplate文檔、視圖、框架類和所涉及的資源形成了一種固定的聯(lián)系,這種固定的聯(lián)系就稱為文檔模板。文檔模板類CSingleDocTemplate是MFC的CDocTemplate類的派生類CSingleDocTemplate文檔模板類在應(yīng)用程序中有著非常重要的作用,是它將原本獨立的文檔、視圖和框架窗口對象聯(lián)系在一起。14第14頁,課件共41頁,創(chuàng)作于2023年2月文檔/視圖為了統(tǒng)一和簡化數(shù)據(jù)處理,基于MFC的應(yīng)用程序通常采用文檔/視圖結(jié)構(gòu)。在MFC文檔/視圖結(jié)構(gòu)中,有關(guān)數(shù)據(jù)處理的工作可以分為數(shù)據(jù)的處理和數(shù)據(jù)的顯示兩個部分。文檔負責數(shù)據(jù)的處理、數(shù)據(jù)的維護以及數(shù)據(jù)的存儲,視圖則負責數(shù)據(jù)的顯示和數(shù)據(jù)的編輯,客戶區(qū)消息的響應(yīng)和處理等工作,即充當了文檔與用戶之間的交互界面。15第15頁,課件共41頁,創(chuàng)作于2023年2月文檔/視圖文檔(document)是MFC應(yīng)用程序中所處理數(shù)據(jù)的集合,包括文本、圖形、圖像和表格等類型。視圖(view)是文檔在應(yīng)用程序窗口中的一個映像。視圖就如一個觀景器,用戶通過視圖看到文檔,通過視圖修改文檔。一個視圖是一個沒有邊框的窗口,它位于主框架窗口中的客戶區(qū)。視圖是文檔對外顯示的窗口,但它并不能完全獨立,它必須依存在一個框架窗口內(nèi)。16第16頁,課件共41頁,創(chuàng)作于2023年2月文檔/視圖當打開某種類型的文件時,應(yīng)用程序必須確定哪一種文檔模板用于解釋這種文件。在初始化程序時,必須首先注冊文檔模板,以便程序利用這個模板來完成主框架窗口、視圖、文檔對象的創(chuàng)建和資源的裝入。
BOOLCMyTextOutApp::InitInstance(){……
CSingleDocTemplate*pDocTemplate;//聲明文檔模板指針pDocTemplate=newCSingleDocTemplate(//創(chuàng)建文檔模板對象
IDR_MAINFRAME,//文檔模板使用的資源ID RUNTIME_CLASS(CMyTextOutDoc),//創(chuàng)建文檔對象
RUNTIME_CLASS(CMainFrame),//創(chuàng)建主SDI框架窗口對象
RUNTIME_CLASS(CMyTextOutView));//創(chuàng)建視圖對象AddDocTemplate(pDocTemplate);//將文檔模板加入鏈表……
}17第17頁,課件共41頁,創(chuàng)作于2023年2月表9-1MFC應(yīng)用程序?qū)ο笾g的相互訪問方法當前位置被訪問的位置訪問方法文檔視圖GetFirstViewPosition()GetNextView()UpdateAllView()文檔模板GetDocTemplate()視圖文檔GetDocument()視圖框架GetParentFrame()框架視圖GetActiveView()框架文檔GetActiveDocument()MDI主框架MDI子框架MDIGetActive()MDI子框架MDI主框架GetParentFrame()任何位置應(yīng)用程序AfxGetApp()任何位置主框架AfxGetMainWnd()18第18頁,課件共41頁,創(chuàng)作于2023年2月文字的顯示【例9-2】以例9-1的單文檔應(yīng)用程序MyTextOut為基礎(chǔ),添加代碼實現(xiàn)文本輸出。程序運行后在視圖窗口顯示文本串“這是我的第一個單文檔應(yīng)用程序!”。19第19頁,課件共41頁,創(chuàng)作于2023年2月文字的顯示【編程步驟】(1)本例需要在視圖類的成員函數(shù)OnDraw()中添加顯示文本的代碼來實現(xiàn)屏幕輸出。在例9-1生成的框架代碼基礎(chǔ)上,打開Workspace窗口單擊ClassView標簽,找到CMyTextOutView類,點擊其左邊的“+”展開該類,雙擊其成員函數(shù)OnDraw(),在編輯窗口出現(xiàn)該成員函數(shù)代碼,在指定位置手工添加如下粗體所示代碼。20第20頁,課件共41頁,創(chuàng)作于2023年2月文字的顯示voidCMyTextOutView::OnDraw(CDC*pDC){ CMyTextOutDoc*pDoc=GetDocument();//獲得文檔類對象的指針
ASSERT_VALID(pDoc);//檢查該指針是否為空
//TODO:adddrawcodefornativedatahere //在視圖內(nèi)的設(shè)備坐標(150,100)位置輸出文本
pDC->TextOut(150,100,“這是我的第一個單文檔應(yīng)用程序!");}TextOut()是CDC類的成員函數(shù)。其功能是在指定的位置輸出文本串。函數(shù)原型如下:CDC:TextOut(intx,inty,constCString&str)其中參數(shù)x,y指定文本輸出位置坐標。參數(shù)str指定輸出內(nèi)容。MFC應(yīng)用程序通常在視圖類CView的成員函數(shù)OnDraw()中實現(xiàn)屏幕輸出,因為在重畫窗口時會自動調(diào)用函數(shù)OnDraw(),這樣才能保證顯示的內(nèi)容在每次重畫窗口時都能顯示出來。GetDocument()是視圖類的成員函數(shù),調(diào)用它可以返回與視圖相關(guān)聯(lián)的文檔對象的指針,利用這個指針可以訪問文檔類及其派生類的公有成員。通常的用法如下:CMyTextOutDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID()是MFC庫中的斷言。ASSERT_VALID()的用法是:ASSERT_VALID(一個從CObject類派生的對象指針)功能:用于對C++對象或指針進行有效性判斷,如果出錯,會彈出帶斷言信息(程序,模塊,assertion行)的對話框。對話框有3個按鈕:“Break”,“Repeat”(“Debug”),和“Continue”(“Ignore”)?!癇reak”結(jié)束程序,“Continue”忽略斷言,最有用的是“Repeat”按鈕。按下它會在斷言的地方打開源代碼編輯器.在這里可以測試所有的變量值并找出問題所在。21第21頁,課件共41頁,創(chuàng)作于2023年2月文字的顯示編譯、連接、運行程序。運行結(jié)果如圖。22第22頁,課件共41頁,創(chuàng)作于2023年2月設(shè)備環(huán)境DCWindows應(yīng)用程序通過為指定設(shè)備(屏幕,打印機等)創(chuàng)建一個設(shè)備環(huán)境(DeviceContext,DC),在DC表示的邏輯意義的“畫布”上進行圖形的繪制。DC是一種包含設(shè)備信息的數(shù)據(jù)結(jié)構(gòu),它包含了物理設(shè)備所需的各種狀態(tài)信息。23第23頁,課件共41頁,創(chuàng)作于2023年2月DC實際上是一個關(guān)于如何繪制圖形的方法的集合。它可以確立在應(yīng)用窗口中繪制圖形的方式,即確定繪圖模式和映射模式。當應(yīng)用程序需要在某個圖形設(shè)備上繪圖時,首先要獲取繪圖窗口區(qū)域的一個設(shè)備環(huán)境DC,之后才能選取合適的繪圖工具進行繪圖工作。為了便于繪圖,Windows系統(tǒng)在初始化時為程序提供了一套默認的繪圖屬性和對象集合,所以程序在取得了合適的DC之后,就可以使用這些默認的繪圖屬性和對象進行繪圖。例如,Windows缺省的DC包括了一支黑色的畫筆,所繪制的線條都是黑色的。設(shè)備環(huán)境DC24第24頁,課件共41頁,創(chuàng)作于2023年2月圖形設(shè)備接口GDI為了方便圖形繪制,Windows把與繪圖相關(guān)的操作都制作成函數(shù),這些函數(shù)的集合稱為圖形設(shè)備接口(graphicaldeviceinterface,GDI)。GDI提供了各種繪圖函數(shù),例如GDI中有繪制矩形的函數(shù)Rectangle()、繪制文本的函數(shù)DrawText()等。GDI還提供了一套繪圖工具,如Pen(畫筆)、Brush(畫刷)、Font(字體)等。由于在Windows屏幕上看到的所有內(nèi)容都是圖形,所以在應(yīng)用窗口中每次進行顯示和編輯操作時,都必須調(diào)用特定的GDI函數(shù)。25第25頁,課件共41頁,創(chuàng)作于2023年2月CDC類為了支持GDI繪圖,MFC提供了兩種重要的類:設(shè)備環(huán)境類(CDC類),用于設(shè)置繪圖屬性和繪制圖形;繪圖對象類,封裝了各種GDI繪圖對象,包括畫筆、刷子、字體、位圖、調(diào)色板和區(qū)域。MFC中,設(shè)備環(huán)境DC是由VC++的CDC類對象來表示的,可以調(diào)用CDC的很多成員函數(shù)來完成各種各樣的繪圖操作。26第26頁,課件共41頁,創(chuàng)作于2023年2月CPaintDC類CPaintDC是所有CDC類中最常用的一個類,它代表了應(yīng)用程序窗口的客戶區(qū),它只能使用于CView類的成員函數(shù)OnDraw中。MFCAppWizard應(yīng)用程序向?qū)?chuàng)建的OnDraw()函數(shù)自動支持所獲取的DC。OnDraw函數(shù)的聲明為:
OnDraw(CDC*pDC);這個函數(shù)的參數(shù)pDC就是指向CPaintDC類對象的指針,在OnDraw函數(shù)中可以使用CDC類的成員函數(shù)對這個對象進行繪圖操作。27第27頁,課件共41頁,創(chuàng)作于2023年2月WM_PAINT消息系統(tǒng)每次創(chuàng)建應(yīng)用程序窗口或窗口需要刷新時都會產(chǎn)生WM_PAINT消息,系統(tǒng)接收到這個消息就會自動調(diào)用OnDraw函數(shù),應(yīng)用程序也可以使用相關(guān)函數(shù)來激活OnDraw函數(shù),因此,程序中所有對窗口客戶區(qū)進行繪圖的代碼都應(yīng)該寫在這個函數(shù)中。28第28頁,課件共41頁,創(chuàng)作于2023年2月GDI坐標系和映射模式在Windows屏幕上繪圖離不開坐標系。上面程序中使用的坐標系是MM_TEXT映射模式,MM_TEXT為GDI默認的映射模式。該模式下的原點為客戶區(qū)左上角,向下、向右為正向。Windows映射模式就是在Windows方式下的屏幕坐標方式。一個實際的物理屏幕是由像素組成的。例如1024×768分辨率就是指物理屏幕的實際寬度為1024個像素,高度為768個像素。29第29頁,課件共41頁,創(chuàng)作于2023年2月表Windows的8種映射模式映射模式映射識別碼邏輯單位坐標系設(shè)定MM_TEXT1一個像素X軸正方向朝右,Y軸正方向朝下MM_LOMETRIC20.1毫米X軸正方向朝右,Y軸正方向朝上MM_HIMETRIC30.01毫米X軸正方向朝右,Y軸正方向朝上MM_LONGLISH40.01英寸X軸正方向朝右,Y軸正方向朝上MM_HIENGLISH50.001英寸X軸正方向朝右,Y軸正方向朝上MM_TWIPS61/1440英寸X軸正方向朝右,Y軸正方向朝上MM_ISOTROPIC7系統(tǒng)確定X、Y軸可任意調(diào)節(jié),X、Y軸比例為1:1MM_ANISOTROPIC8系統(tǒng)確定X、Y軸可任意調(diào)節(jié),X、Y軸比例任意30第30頁,課件共41頁,創(chuàng)作于2023年2月菜單【例9-3】改進例9-2的單文檔應(yīng)用程序MyTextOut,程序運行后使用菜單命令,調(diào)用對話框輸入顯示的文本內(nèi)容和顯示的坐標位置,按照輸入的內(nèi)容在視圖區(qū)顯示文本。31第31頁,課件共41頁,創(chuàng)作于2023年2月菜單——建立菜單資源【編程步驟】(1)建立菜單資源。在向?qū)傻某绦蚩蚣苤行薷牟藛钨Y源,添加“文本|顯示文本”菜單。在ResourceView中找到IDR_MAINFRAME資源,雙擊之,在顯示出來的主菜單項最后的虛線空白框處雙擊,在彈出的properties對話框中填寫Caption項為“文本(&T)”,可以看到主菜單最后一個菜單項即為“文本”,字符“&”用于在顯示字母T時加下劃線,表示該菜單命令的快捷鍵是“Alt+T”。并使用鼠標拖動該菜單項移至“幫助”菜單項左側(cè)。注意,主菜單只有標題而沒有相應(yīng)的ID標識。32第32頁,課件共41頁,創(chuàng)作于2023年2月菜單——建立菜單資源33第33頁,課件共41頁,創(chuàng)作于2023年2月菜單——建立菜單資源接著為主菜單添加菜單項。在“文本”菜單下面的虛線空白框處雙擊,在彈出的properties對話框中填寫Caption項為“顯示文本”,ID是該菜單項的標識,在此框中輸入ID_TEXT_OUTPUT。在Prompt文本框中輸入狀態(tài)欄提示語“在視圖區(qū)給定位置顯示輸入的文本內(nèi)容”。34第34頁,課件共41頁,創(chuàng)作于2023年2月菜單——建立菜單資源35第35頁,課件共41頁,創(chuàng)作于2023年2月菜單(2)添加菜單命令處理函數(shù)。按下Ctrl+W鍵啟動ClassWizard,在Classname下拉列表框中選擇文檔類CMyTextOutDoc,在ObjectIDs列表框中選擇ID_TEXT_OUTPUT(“顯示文本”菜單項的ID),在Messages列表框中選擇COMMAND,單擊AddFunction按鈕,為“顯示文本”菜單項添加命令處理函數(shù)CMyTextOutDoc::OnTextOutput()。36第36頁,課件共41頁,創(chuàng)作于2023年2月菜單(3)創(chuàng)建對話框資源。在ResourceView中找到Dialog資源,鼠標右擊彈出快捷菜單,單擊“InsertDialog”,添加一個新對話框,修改其ID為IDD_DLG_TEXT,Caption項為“請輸入文本內(nèi)容和顯示位置”。參見圖示。之后在對話框上放置相應(yīng)的控件并布局。37第37頁,課件共41頁,創(chuàng)作于2023年2月菜單(4)為對話框資源創(chuàng)建對應(yīng)的對話框類。雙擊對話框資源,彈出為對話框增加類的對話框。設(shè)置對話框類名為CTextDialog,為該類自動生成兩個文件TextDialog.h和TextDialog.cpp。38第38頁,課件共41頁,創(chuàng)作于2023年2月菜單為三個編輯框控件添加成員變量m_strText、m_nText_X、m_nText_Y。如圖所示。39第39頁,課件共41頁,創(chuàng)作于2023年2月菜單(5)建立文本對話框與文檔類的關(guān)聯(lián)。下面在文檔類CMyTextOutDoc中加入與上述控件變量對應(yīng)的三個成員變量,即在MyTextOutDoc.h文件中加入:classCMyTextOutDoc:publicCDocument{protected://createfromserializationonly CMyTextOutDoc(); DECLARE_DYNCREATE(CMyTextOutDoc)
手工添加的三個變量
intm_nText_X; int m_nText_Y; CStringm_
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年自行車棚智能鎖具供應(yīng)與安裝合同
- 2025年國際能源項目投資合作合同范本
- 2025年度節(jié)慶活動合影拍攝與民俗文化傳承合同
- 2025年度智能零售合作經(jīng)營店鋪協(xié)議合同范本
- 2025年度環(huán)保技術(shù)研發(fā)與創(chuàng)新支持合同-@-1
- 2025年度國際藝術(shù)品交易合同標的藝術(shù)品鑒定與交易保障協(xié)議
- 2025年度深海貨物海上運輸合同范本及實施細則
- 2025年度化妝品買賣合同擔保函范本
- 2025年度皮鞋產(chǎn)品線上銷售與物流配送服務(wù)合同
- 2025年度國內(nèi)貨運代理生鮮產(chǎn)品運輸合同范本
- Unit 6 Beautiful landscapes Integration說課稿 - 2024-2025學(xué)年譯林版英語七年級下冊
- 北京市東城區(qū)2023-2024學(xué)年高二下學(xué)期期末英語試題 含解析
- 測繪學(xué)基礎(chǔ)知識單選題100道及答案解析
- 2024年國家焊工職業(yè)技能理論考試題庫(含答案)
- 特魯索綜合征
- 2024年山東省泰安市高考語文一模試卷
- TCL任職資格體系資料HR
- 《中國古代寓言》導(dǎo)讀(課件)2023-2024學(xué)年統(tǒng)編版語文三年級下冊
- 五年級上冊計算題大全1000題帶答案
- 工程建設(shè)行業(yè)標準內(nèi)置保溫現(xiàn)澆混凝土復(fù)合剪力墻技術(shù)規(guī)程
- 屋面細石混凝土保護層施工方案及方法
評論
0/150
提交評論