版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 2 基于MFC進行應用開發(fā) 使用VC+的應用程序向導MFC AppWizard可 以開發(fā): 單文檔單文檔Single document 多文檔Multiple document 對話框Dialog based 三種類型的應用程序。 本講開始學習單文檔 應用程序的開發(fā)技術 3 單文檔應用案例1的程序運行界面 4 本講主要內容 利用向導建立一個單文檔應用程序框架 向導生成的核心類及其功能 文檔/視圖 文字的顯示 菜單 5 單文檔案例1文本顯示案例 利用MFC建立一個單文檔應用程序,用于在 客戶區(qū)顯示文本。程序的主要功能包括: 使用菜單命令 按照指定文本內容和坐標位置在客戶區(qū)顯示文 本 保存文本內
2、容 等。 6 利用向導建立一個單文檔應用程序框架 【例【例9-1】利用MFC AppWizardexe向導生成 一個SDI單文檔應用程序MyTextOut。 7 【編程步驟編程步驟】 (1)在Visual C+ IDE中執(zhí)行File|New命令,打開 New對話框。在項目類型列表框中選擇MFC AppWizardexe項,在Project name框中輸入項目 名稱,本例為MyTextOut。選擇好合適的路徑。 (2)在MFC AppWizard-Step 1對話框中選擇Single document項,向導將會創(chuàng)建一個單文檔應用程序 框架,在本例中,以下的各個步驟使用向導提供的 默認選項即可
3、。 利用向導建立一個單文檔應用程序框架 8 利用向導建立一個單文檔應用程序框架 編譯、連接、運行MFC AppWizardexe向導創(chuàng)建的 應用程序MyTextOut。運行結果如圖所示。 框架(菜單欄、 工具欄、狀態(tài) 欄) 客戶區(qū)單文檔程序要包含文檔,并且一次 只能打開一個文檔,其框架是指菜 單欄、工具欄、狀態(tài)欄等界面元素, 客戶區(qū)則用于展示用戶文檔。 9 向導生成的核心類及其功能 MFC應用程序框架實質上是一個標準的Windows 應用程序,它具有標準的窗口、菜單欄和工具欄。 MFC AppWizardexe向導為一般的SDI應用程序 生成了五個核心類,它們分別是: 應用程序類CMyText
4、OutApp 框架窗口類CMainFrame 文檔類CMyTextOutDoc 視圖類CMyTextOutView 文檔模板類CSingleDocTemplate 10 向導生成的核心類及其功能 一般應用程序框架中所有類的名字由MFC AppWizardexe向導根據一定的規(guī)則自動命 名。 應用程序框架中類(框架窗口類例外)的命名 規(guī)則一般遵照如下要求: Class Name = C + ProjectName + ClassType 11 向導生成的核心類及其功能 1應用程序類CMyTextOutApp CMyTextOutApp類是MFC的CWinApp類的派生類。 它的主要功能有: 應用
5、程序的初始化; 程序的啟動; 程序運行結束時的清理工作。 應用程序對象theApp是一個唯一的全局變量,它的 主要功能是通過調用WinMain()主函數啟動程序的 運行。MFC應用程序框架也有一個作為程序入口 點的WinMain()主函數,但在源程序中看不見該函 數,它在MFC中已定義好并同應用程序相鏈接。 12 向導生成的核心類及其功能 2框架窗口類CMainFrame CMainFrame類是MFC的CFrameWnd類的派 生類。它主要負責創(chuàng)建標題欄、菜單欄、工 具欄和狀態(tài)欄。不同的SDI應用程序,其框 架窗口類名和文件名是統一的。 CMainFrame類中聲明了框架窗口中的工具欄 m_
6、wndToolBar、狀態(tài)欄m_wndStatusBar兩 個成員變量和四個成員函數。 13 向導生成的核心類及其功能 3文檔類CMyTextOutDoc 類CMyTextOutDoc是MFC的CDocument類的派生類, 它用于管理和維護數據,包括應用程序數據的保存 和裝載,實現文檔的序列化功能。 4視圖類CMyTextOutView 類CMyTextOutView是MFC的CView類的派生類,它 主要負責客戶區(qū)文檔數據的顯示,以及如何進行人 機交互。 14 向導生成的核心類及其功能 5文檔模板類CSingleDocTemplate 文檔、視圖、框架類和所涉及的資源形成了一 種固定的聯系
7、,這種固定的聯系就稱為文檔 模板。 文檔模板類CSingleDocTemplate是MFC的 CDocTemplate類的派生類 CSingleDocTemplate文檔模板類在應用程序 中有著非常重要的作用,是它將原本獨立的 文檔、視圖和框架窗口對象聯系在一起。 15 文檔/視圖 為了統一和簡化數據處理,基于MFC的應用程序通 常采用文檔/視圖結構。 在MFC文檔/視圖結構中,有關數據處理的工作可以 分為數據的處理和數據的顯示兩個部分。 文檔負責數據的處理、數據的維護以及數據的存儲, 視圖則負責數據的顯示和數據的編輯,客戶區(qū)消息的 響應和處理等工作,即充當了文檔與用戶之間的交 互界面。 16
8、 文檔/視圖 文檔(document)是MFC應用程序中所處理數據的 集合,包括文本、圖形、圖像和表格等類型。 視圖(view)是文檔在應用程序窗口中的一個映像。 視圖就如一個觀景器,用戶通過視圖看到文檔, 通過視圖修改文檔。 一個視圖是一個沒有邊框的窗口,它位于主框架窗 口中的客戶區(qū)。視圖是文檔對外顯示的窗口,但 它并不能完全獨立,它必須依存在一個框架窗口 內。 17 文檔/視圖 當打開某種類型的文件時,應用程序必須確定哪一種文檔模 板用于解釋這種文件。在初始化程序時,必須首先注冊文 檔模板,以便程序利用這個模板來完成主框架窗口、視圖、 文檔對象的創(chuàng)建和資源的裝入。 BOOL CMyText
9、OutApp:InitInstance() CSingleDocTemplate* pDocTemplate; /聲明文檔模板指針聲明文檔模板指針 pDocTemplate = new CSingleDocTemplate( /創(chuàng)建文檔模板對象創(chuàng)建文檔模板對象 IDR_MAINFRAME, /文檔模板使用的資源文檔模板使用的資源ID RUNTIME_CLASS(CMyTextOutDoc), /創(chuàng)建文檔對象創(chuàng)建文檔對象 RUNTIME_CLASS(CMainFrame), / 創(chuàng)建主創(chuàng)建主SDI框架窗口對象框架窗口對象 RUNTIME_CLASS(CMyTextOutView); /創(chuàng)建視圖對
10、象創(chuàng)建視圖對象 AddDocTemplate(pDocTemplate); /將文檔模板加入鏈表將文檔模板加入鏈表 18 表9-1 MFC應用程序對象之間的相互訪問方法 當前位置被訪問的位置訪問方法 文檔視圖GetFirstViewPosition() GetNextView() UpdateAllView() 文檔模板GetDocTemplate() 視圖文檔GetDocument() 視圖框架GetParentFrame() 框架視圖GetActiveView() 框架文檔GetActiveDocument() MDI主框架MDI子框架MDIGetActive() MDI子框架MDI主框架
11、GetParentFrame() 任何位置應用程序AfxGetApp() 任何位置主框架AfxGetMainWnd() 19 文字的顯示 【例【例9-2】以例9-1的單文檔應用程序 MyTextOut為基礎,添加代碼實現文本輸出。 程序運行后在視圖窗口顯示文本串“這是我 的第一個單文檔應用程序!”。 20 文字的顯示 【編程步驟】【編程步驟】 (1)本例需要在視圖類的成員函數OnDraw()中添加 顯示文本的代碼來實現屏幕輸出。 在例9-1生成的框架代碼基礎上,打開Workspace窗 口單擊ClassView標簽,找到CMyTextOutView類, 點擊其左邊的“+”展開該類,雙擊其成員函
12、數 OnDraw(),在編輯窗口出現該成員函數代碼,在 指定位置手工添加如下粗體所示代碼。 21 文字的顯示 void CMyTextOutView:OnDraw(CDC* pDC) CMyTextOutDoc* pDoc = GetDocument(); /獲得文檔類對象的指針 ASSERT_VALID(pDoc); /檢查該指針是否為空 / TODO: add draw code for native data here /在視圖內的設備坐標(150,100)位置輸出文本 pDC-TextOut(150,100,“這是我的第一個單文檔應用程這是我的第一個單文檔應用程 序序!); TextO
13、ut()是CDC類的成員函數。其功能是在指定的 位置輸出文本串。函數原型如下: CDC: TextOut( int x, int y, const CString ASSERT_VALID(pDoc); ASSERT_VALID()是MFC庫中的斷言 。ASSERT_VALID()的用法是: ASSERT_VALID(一個從CObject類派生的對象指針) 功能:用于對C+對象或指針進行有效性判斷,如果出錯,會彈出帶 斷言信息(程序,模塊, assertion行)的對話框。對話框有3個按鈕: “Break”,“Repeat”(“Debug”), 和“Continue” (“Ignore”)?!?/p>
14、Break”結束程序,“Continue”忽略斷言,最 有用的是“Repeat”按鈕。按下它會在斷言的地方打開源代碼編輯 器. 在這里可以測試所有的變量值并找出問題所在。 22 文字的顯示 編譯、連接、運行程序。運行結果如圖。 23 設備環(huán)境DC Windows應用程序通過為指定設備(屏幕,打 印機等)創(chuàng)建一個設備環(huán)境(Device Context, DC),在DC表示的邏輯意義的 “畫布”上進行圖形的繪制。 DC是一種包含設備信息的數據結構,它包含 了物理設備所需的各種狀態(tài)信息。 24 DC實際上是一個關于如何繪制圖形的方法的集合。 它可以確立在應用窗口中繪制圖形的方式,即確定 繪圖模式和映
15、射模式。當應用程序需要在某個圖形 設備上繪圖時,首先要獲取繪圖窗口區(qū)域的一個設 備環(huán)境DC,之后才能選取合適的繪圖工具進行繪 圖工作。 為了便于繪圖,Windows系統在初始化時為程序提 供了一套默認的繪圖屬性和對象集合,所以程序在 取得了合適的DC之后,就可以使用這些默認的繪 圖屬性和對象進行繪圖。例如,Windows缺省的 DC包括了一支黑色的畫筆,所繪制的線條都是黑 色的。 設備環(huán)境DC 25 圖形設備接口GDI 為了方便圖形繪制,Windows把與繪圖相關的操作 都制作成函數,這些函數的集合稱為圖形設備接口 (graphical device interface,GDI)。 GDI提供
16、了各種繪圖函數,例如GDI中有繪制矩形 的函數Rectangle()、繪制文本的函數DrawText()等。 GDI還提供了一套繪圖工具,如Pen(畫筆)、 Brush(畫刷)、Font(字體)等。 由于在Windows屏幕上看到的所有內容都是圖形, 所以在應用窗口中每次進行顯示和編輯操作時,都 必須調用特定的GDI函數。 26 CDC類 為了支持GDI繪圖,MFC提供了兩種重要的類: 設備環(huán)境類(CDC類),用于設置繪圖屬性和 繪制圖形; 繪圖對象類,封裝了各種GDI繪圖對象,包括畫 筆、刷子、字體、位圖、調色板和區(qū)域。 MFC中,設備環(huán)境DC是由VC+的CDC類對象來 表示的,可以調用CD
17、C的很多成員函數來完成各 種各樣的繪圖操作。 27 CPaintDC類 CPaintDC是所有CDC類中最常用的一個類,它代表 了應用程序窗口的客戶區(qū),它只能使用于CView類 的成員函數OnDraw中。MFC AppWizard應用程序 向導創(chuàng)建的OnDraw()函數自動支持所獲取的DC。 OnDraw函數的聲明為: OnDraw(CDC *pDC); 這個函數的參數pDC就是指向CPaintDC類對象的指 針,在OnDraw函數中可以使用CDC類的成員函數 對這個對象進行繪圖操作。 28 WM_PAINT消息 系統每次創(chuàng)建應用程序窗口或窗口需要刷新時 都會產生WM_PAINT消息,系統接收
18、到這個 消息就會自動調用OnDraw函數,應用程序 也可以使用相關函數來激活OnDraw函數, 因此,程序中所有對窗口客戶區(qū)進行繪圖的 代碼都應該寫在這個函數中。 29 GDI坐標系和映射模式 在Windows屏幕上繪圖離不開坐標系。上面程序中 使用的坐標系是MM_TEXT映射模式,MM_TEXT 為GDI默認的映射模式。該模式下的原點為客戶區(qū) 左上角,向下、向右為正向。 Windows映射模式就是在Windows方式下的屏幕坐 標方式。一個實際的物理屏幕是由像素組成的。例 如1024768分辨率就是指物理屏幕的實際寬度為 1024個像素,高度為768個像素。 30 表 Windows的8種映
19、射模式 映射模式 映射 識別碼 邏輯單位坐標系設定 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系統確定X、Y軸可任意調節(jié),X、Y軸比例為1:1 MM_ANISOTROPIC8系統確定X、Y軸可任意調節(jié),X、Y軸比例任意
20、31 菜單 【例【例9-3】改進例9-2的單文檔應用程序 MyTextOut,程序運行后使用菜單命令,調 用對話框輸入顯示的文本內容和顯示的坐標 位置,按照輸入的內容在視圖區(qū)顯示文本。 32 菜單建立菜單資源 【編程步驟編程步驟】 (1)建立菜單資源。在向導生成的程序框架中修改 菜單資源,添加“文本|顯示文本”菜單。 在ResourceView中找到IDR_MAINFRAME資源,雙 擊之,在顯示出來的主菜單項最后的虛線空白框 處雙擊,在彈出的properties對話框中填寫 Caption項為“文本( DECLARE_DYNCREATE(CMyTextOutDoc) 手工添加的三個變量 in
21、t m_nText_X; int m_nText_Y; CString m_strText; 41 菜單 (6)在CMyTextOutDoc.cpp文件中加入菜單命令響應函數OnTextOutput() 的代碼。 void CMyTextOutDoc:OnTextOutput() / TODO: Add your command handler code here CTextDialog tdlg; /定義一個對話框對象 if(tdlg.DoModal()=IDOK) /顯示對話框 /保存編輯框數據 將控件變量的數據保存到文檔類成員變量中 m_nText_X=tdlg.m_nText_X; m_nText_Y=tdlg.m_nText_Y; m_strText=tdlg.m_strText; UpdateAllViews(NULL); 接著需要在MyTextOutDoc.cpp文件中加入: #include TextDi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 探礦全證辦理流程
- 深度多模態(tài)數據融合 Deep Multimodal Data Fusion
- 部編版歷史九年級上冊第三單元 第10課《拜占庭帝國和查士丁尼法典》說課稿
- 建功中學聯盟九年級上學期語文10月月考試卷
- 五年級數學(小數乘法)計算題專項練習及答案
- 肉粉銷售合同范本(2篇)
- 股份責任協議書(2篇)
- 統計分析軟件 試題及答案 共3套
- 南京航空航天大學《車輛工程仿真與分析》2023-2024學年第一學期期末試卷
- 安徽某船閘擴建工程施工組織設計
- 英語-浙江省湖州、衢州、麗水2024年11月三地市高三教學質量檢測試卷試題和答案
- 勞動技術教案
- 廣東省深圳市2023-2024學年高一上學期生物期中試卷(含答案)
- 第七章 立體幾何與空間向量綜合測試卷(新高考專用)(學生版) 2025年高考數學一輪復習專練(新高考專用)
- 中國急性缺血性卒中診治指南(2023版)
- 福建省殘疾人崗位精英職業(yè)技能競賽(美甲師)參考試題及答案
- 在線學習新變革課件 2024-2025學年人教版(2024)初中信息技術七年級全一冊
- 勞動法律學習試題
- 航空器系統與動力裝置學習通超星期末考試答案章節(jié)答案2024年
- 中考英語過去將來時趣味講解動態(tài)課件(43張課件)
- 2024年中國汽車噴漆烤房市場調查研究報告
評論
0/150
提交評論