版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第第4章章 MFC應(yīng)用程序設(shè)計(jì)的基礎(chǔ)知識(shí)應(yīng)用程序設(shè)計(jì)的基礎(chǔ)知識(shí)2 利用利用Windows APIWindows API函數(shù)進(jìn)行編程時(shí),大量的代碼需要程序函數(shù)進(jìn)行編程時(shí),大量的代碼需要程序員自己編寫,編程的工作量較大。員自己編寫,編程的工作量較大。 通常利用通常利用MFC(Microsoft Foundation Classes)MFC(Microsoft Foundation Classes)和向?qū)Ш拖驅(qū)?Wizard)(Wizard)來編寫來編寫WindowsWindows應(yīng)用程序。(應(yīng)用程序。(P.14P.14)首先使用首先使用AppWizardAppWizard來生成來生成Window
2、sWindows應(yīng)用程序的基本框架應(yīng)用程序的基本框架然后用然后用ClassWizardClassWizard來建立應(yīng)用程序的類、消息處理、數(shù)據(jù)處理函數(shù)來建立應(yīng)用程序的類、消息處理、數(shù)據(jù)處理函數(shù)或定義控件的屬性、事件和方法或定義控件的屬性、事件和方法最后把各應(yīng)用程序所要求的功能添加到類中最后把各應(yīng)用程序所要求的功能添加到類中31 MFC概述概述MFC1.0 & MS C/C+7.0MFC1.0 & MS C/C+7.0應(yīng)用程序中非圖形部分的類應(yīng)用程序中非圖形部分的類GUIGUI功能的功能的WindowsWindows相關(guān)類相關(guān)類MFC2.0 & MS VC+1.0MFC2
3、.0 & MS VC+1.0在在1.01.0基礎(chǔ)上增添了一些應(yīng)用程序基礎(chǔ)上增添了一些應(yīng)用程序MFC3.0 & VC+2.0MFC3.0 & VC+2.0增添了對(duì)開發(fā)增添了對(duì)開發(fā)3232位應(yīng)用程序的支持位應(yīng)用程序的支持MFC2.0 & MS VC+1.5MFC2.0 & MS VC+1.5添加了添加了ODBCODBC類,并且還支持類,并且還支持OLEOLE的性能的性能MFC4.0MFC4.0包含了在包含了在Win95Win95和和NTNT中大多數(shù)新的公共控件和中大多數(shù)新的公共控件和DAODAO、MAPIMAPI增強(qiáng)了對(duì)數(shù)據(jù)庫(kù)應(yīng)用程序的支持增強(qiáng)了對(duì)數(shù)據(jù)庫(kù)應(yīng)用
4、程序的支持利用利用DAODAO類通過編程語言來訪問、操縱和管理數(shù)據(jù)庫(kù)類通過編程語言來訪問、操縱和管理數(shù)據(jù)庫(kù)對(duì)對(duì)InternetInternet也提供了強(qiáng)有力的支持也提供了強(qiáng)有力的支持MFC4.21MFC4.214MFCMFC還很好地保持了程序的向下兼容性還很好地保持了程序的向下兼容性是用來編是用來編寫寫WindowsWindows應(yīng)用程序應(yīng)用程序的的C+C+類集類集以層次結(jié)構(gòu)組織以層次結(jié)構(gòu)組織封裝了大部分封裝了大部分APIAPI函數(shù)函數(shù)提供了圖形環(huán)境下應(yīng)用程序的框架提供了圖形環(huán)境下應(yīng)用程序的框架提供了創(chuàng)建應(yīng)用程序的組件提供了創(chuàng)建應(yīng)用程序的組件提供了大量的基類供程序員根據(jù)不同的應(yīng)用環(huán)境進(jìn)行擴(kuò)充提
5、供了大量的基類供程序員根據(jù)不同的應(yīng)用環(huán)境進(jìn)行擴(kuò)充允許在編程過程中自定義和擴(kuò)展應(yīng)用程序中的類允許在編程過程中自定義和擴(kuò)展應(yīng)用程序中的類較好的移植性,較好的移植性,可移植于眾多的平臺(tái)可移植于眾多的平臺(tái)MFCMFC52 MFC類庫(kù)的組織結(jié)構(gòu)及主要的類類庫(kù)的組織結(jié)構(gòu)及主要的類2.1 MFC類庫(kù)的組織結(jié)構(gòu)類庫(kù)的組織結(jié)構(gòu)(教材P.226)67根類:根類:CObjectCObject。MFCMFC中中多數(shù)類和用戶自定義子類多數(shù)類和用戶自定義子類的根類,是抽象基類。它的根類,是抽象基類。它提供了許多編程所需的公提供了許多編程所需的公共操作。共操作。對(duì)象的建立對(duì)象的建立對(duì)象的刪除對(duì)象的刪除運(yùn)行時(shí)信息運(yùn)行時(shí)信息對(duì)
6、象診斷輸出對(duì)象診斷輸出串行化支持串行化支持應(yīng)用程序和線程支持類應(yīng)用程序和線程支持類命令相關(guān)類命令相關(guān)類文檔類文檔類文檔模板類文檔模板類視類視類( (體系結(jié)構(gòu)體系結(jié)構(gòu)) )框架窗口框架窗口( (體系結(jié)構(gòu)體系結(jié)構(gòu)) )應(yīng)用程序體系應(yīng)用程序體系結(jié)構(gòu)類結(jié)構(gòu)類窗口、對(duì)話窗口、對(duì)話框和控件類框和控件類框架窗口類(窗口)框架窗口類(窗口)視類(窗口)視類(窗口)對(duì)話框類對(duì)話框類控件條類控件條類繪圖繪圖和打和打印類印類輸出輸出( (設(shè)備相關(guān)設(shè)備相關(guān)) )類類繪圖工具類繪圖工具類簡(jiǎn)單數(shù)據(jù)類型類簡(jiǎn)單數(shù)據(jù)類型類數(shù)組、列表和映射類數(shù)組、列表和映射類數(shù)組類數(shù)組類列表類列表類映射類映射類8文件和數(shù)據(jù)庫(kù)類文件和數(shù)據(jù)庫(kù)類文件
7、文件I/OI/O類類DAODAO類類ODBCODBC類類InternetInternet和網(wǎng)絡(luò)工作類和網(wǎng)絡(luò)工作類ISAPIISAPI類類Windows SocketWindows Socket類類Win32 InternetWin32 Internet類類OLEOLE類類OLEOLE容器類容器類OLEOLE服務(wù)器類服務(wù)器類OLEOLE拖放和數(shù)據(jù)傳輸類拖放和數(shù)據(jù)傳輸類OLEOLE普通對(duì)話框類普通對(duì)話框類OLEOLE動(dòng)畫類動(dòng)畫類OLEOLE控件類控件類活動(dòng)文檔類活動(dòng)文檔類其他文檔類其他文檔類調(diào)試和異常類調(diào)試和異常類調(diào)試支持類調(diào)試支持類異常類異常類93 3 MFC中的全局函數(shù)中的全局函數(shù) 以Afx開
8、頭的函數(shù)除數(shù)據(jù)庫(kù)類函數(shù)和DDX(Dialog Data Exchange)函數(shù)外,在目前的版本中,都表示是一個(gè)全局函數(shù)。函函數(shù)數(shù)名名功功能能簡(jiǎn)簡(jiǎn)介介AfxAbort無無條條件件終終止止一一個(gè)個(gè)應(yīng)應(yīng)用用程程序序AfxBeginThread創(chuàng)創(chuàng)建建一一個(gè)個(gè)新新線線程程并并執(zhí)執(zhí)行行它它AfxEndThread終終止止當(dāng)當(dāng)前前正正在在執(zhí)執(zhí)行行的的線線程程AfxFormatString格格式式化化字字符符串串AfxMessageBox顯顯示示一一個(gè)個(gè)Windows消消息息框框AfxGetApp返返回回當(dāng)當(dāng)前前應(yīng)應(yīng)用用程程序序?qū)?duì)象象的的指指針針AfxGetInstanceHandle返返回回標(biāo)標(biāo)識(shí)識(shí)當(dāng)當(dāng)
9、前前應(yīng)應(yīng)用用程程序序?qū)?duì)象象的的句句柄柄AfxRegisterWndClass登登記記用用于于創(chuàng)創(chuàng)建建Windows窗窗口口的的窗窗口口類類104.文檔文檔/視圖結(jié)構(gòu)視圖結(jié)構(gòu) MFC通過文檔/視圖結(jié)構(gòu)把對(duì)數(shù)據(jù)的管理和顯示進(jìn)行了分工,其中,文檔負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和管理,視圖負(fù)責(zé)數(shù)據(jù)的顯示。 在文檔/視圖結(jié)構(gòu)中,文檔是一個(gè)內(nèi)存中的概念,它負(fù)責(zé)存儲(chǔ)和管理應(yīng)用程序在內(nèi)存中的所有數(shù)據(jù)。即,它首先采用某種數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)應(yīng)用程序中所有的數(shù)據(jù),構(gòu)成了應(yīng)用程序所使用的數(shù)據(jù)單元;此外,它提供了管理和維護(hù)數(shù)據(jù)的手段以及存盤、讀取的手段。11 視圖是一個(gè)用戶界面的概念,它構(gòu)成了數(shù)據(jù)的用戶窗口,為用戶提供了文檔中的數(shù)據(jù)的可
10、視化顯示,它把文檔的部分或全部?jī)?nèi)容在窗口中顯示出來。視圖還給用戶提供了一個(gè)與文檔中的數(shù)據(jù)交互的界口,它可以把用戶的輸入轉(zhuǎn)化為對(duì)文檔中數(shù)據(jù)的操作。 每個(gè)文檔都會(huì)有一個(gè)或多個(gè)視圖顯示,這些視圖可以互不相同。比如,在Excel電子表格中,我們可以將數(shù)據(jù)以表格方式顯示,也可以將數(shù)據(jù)以圖表方式顯示。一個(gè)視圖既可以輸出到窗口中,也可以輸出到打印機(jī)上。12內(nèi)存內(nèi)存用戶界面用戶界面13 MFC中,文檔和視圖分別用文檔類和視圖類來表示。每一個(gè)支持文檔/視圖結(jié)構(gòu)的應(yīng)用程序都有自己的文檔類和視圖類,二者都可以獲得對(duì)方的指針從而進(jìn)行訪問。其中,文檔類是從CDocument派生的,視圖類是從CView或CView的派生
11、類派生的。14文檔文檔/ /視圖結(jié)構(gòu)的工作機(jī)制視圖結(jié)構(gòu)的工作機(jī)制視圖類通過視圖類通過GetDocument()GetDocument()成員函數(shù)獲得指向文檔類成員函數(shù)獲得指向文檔類對(duì)象的指針對(duì)象的指針通過該指針獲得文檔通過該指針獲得文檔類中的數(shù)據(jù)類中的數(shù)據(jù)視圖類把數(shù)據(jù)顯示視圖類把數(shù)據(jù)顯示于客戶區(qū)中于客戶區(qū)中用戶通過與客戶區(qū)用戶通過與客戶區(qū)的交互來對(duì)數(shù)據(jù)進(jìn)的交互來對(duì)數(shù)據(jù)進(jìn)行修改行修改視圖通過調(diào)用文檔類的成視圖通過調(diào)用文檔類的成員函數(shù)將經(jīng)過修改的數(shù)據(jù)員函數(shù)將經(jīng)過修改的數(shù)據(jù)保存回文檔類對(duì)象保存回文檔類對(duì)象如果用戶發(fā)出保存命令,則文檔對(duì)象將如果用戶發(fā)出保存命令,則文檔對(duì)象將修改過的數(shù)據(jù)保存到永久介質(zhì)修
12、改過的數(shù)據(jù)保存到永久介質(zhì)( (如磁盤如磁盤文件文件) )中中155.應(yīng)用程序向?qū)Ъ捌鋺?yīng)用步驟(教材應(yīng)用程序向?qū)Ъ捌鋺?yīng)用步驟(教材P.228) 從第2章可以看到,不管Windows應(yīng)用程序完成何種功能,它們的框架是固定的,都必須經(jīng)歷注冊(cè)窗口類、創(chuàng)建窗口、更新窗口客戶區(qū)、建立消息循環(huán)這些套路。如果能把這些固定的東西簡(jiǎn)化,依靠開發(fā)工具自動(dòng)為我們生成,就可以大大減輕程序員的負(fù)擔(dān),使他們能集中注意力在程序的邏輯上。16應(yīng)用程序向?qū)槌绦騿T提供了應(yīng)用程序向?qū)槌绦騿T提供了一個(gè)基于一個(gè)基于MFCMFC的的應(yīng)用程序框架應(yīng)用程序框架,程序員可以在此基礎(chǔ)上添加實(shí)程序員可以在此基礎(chǔ)上添加實(shí)現(xiàn)特定功能的代碼即可現(xiàn)特定
13、功能的代碼即可171819202122232425266.第一個(gè)第一個(gè)MFC程序程序 學(xué)習(xí)向?qū)Мa(chǎn)生的類學(xué)習(xí)向?qū)Мa(chǎn)生的類6.1 向?qū)Мa(chǎn)生的4個(gè)主要類 應(yīng)用程序類(從CWinApp派生) 封裝與應(yīng)用程序相關(guān)的操作。重要成員函數(shù): InitInstance():當(dāng)應(yīng)用程序啟動(dòng)時(shí)由MFC自動(dòng)調(diào)用,完成一些應(yīng)用程序的初始化操作。 ExitInstance():當(dāng)應(yīng)用程序退出時(shí)由MFC自動(dòng)調(diào)用,完成一些清除工作。27 主框架類CMainFrame(從CFrameWnd派生) 封裝與窗口框架相關(guān)的操作。重要成員函數(shù): OnCreate():這個(gè)函數(shù)就是WM_CREATE消息的處理函數(shù),當(dāng)窗口剛被創(chuàng)建時(shí)由MF
14、C自動(dòng)調(diào)用,完成主框架的創(chuàng)建(包括工具欄、狀態(tài)欄等的創(chuàng)建)。由于這個(gè)類是主框架類,所以這個(gè)函數(shù)不進(jìn)行客戶區(qū)的任何創(chuàng)建工作。 PreCreateWindow():在上一個(gè)函數(shù)被調(diào)用前,由MFC自動(dòng)調(diào)用,通過修改一個(gè)CREATESTRUCT結(jié)構(gòu)體變量來完成窗口創(chuàng)建時(shí)的一些風(fēng)格定制。這是一個(gè)虛函數(shù),我們可以重載它,然后修改CREATESTRUCT結(jié)構(gòu)體變量來達(dá)到修改窗口風(fēng)格的目的。28 另外,如果應(yīng)用程序是多文檔界面的,那么還有一個(gè)CChildFrame類,專門負(fù)責(zé)管理各個(gè)子窗口的框架。具體內(nèi)容和調(diào)用時(shí)機(jī)與CMainFrame類相似。29 文檔類(從CDocument派生) 封裝文檔/視圖結(jié)構(gòu)中與文
15、檔相關(guān)的操作,我們可以添加適合的變量或數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)和管理應(yīng)用程序所需的數(shù)據(jù)。重要成員函數(shù): OnNewDocument():虛函數(shù),當(dāng)用戶點(diǎn)擊“新建”菜單或工具欄按扭時(shí)由MFC自動(dòng)調(diào)用。我們可以重載它,然后實(shí)現(xiàn)自己的新建文檔時(shí)的初始化工作。 Serialize():虛函數(shù),當(dāng)用戶點(diǎn)擊“打開”或“保存”或“另存為”菜單或工具欄按扭時(shí)由MFC自動(dòng)調(diào)用。我們一定要重載它,才能夠?qū)崿F(xiàn)自己的打開和保存工作。 30注意: 關(guān)于Serialize(),只有4種類可以使用這個(gè)函數(shù): CDocument及其派生類 CObArray依次調(diào)用每個(gè)元素的Serialize() CObList 依次調(diào)用每個(gè)元素的Se
16、rialize() 派生自CObject的自定義類(需在頭文件中添加DECLARE_SERIAL(CXXX)宏和在源文件中添加IMPLEMENT_SERIAL(CXXX,CObject,1) 宏)。思考: 一程序中有多個(gè)對(duì)象,并且需要將這些對(duì)象中的數(shù)據(jù)存盤。那么在文檔類中應(yīng)怎樣進(jìn)行設(shè)計(jì)?31 視圖類(從CView或其派生類派生) 封裝文檔/視圖結(jié)構(gòu)中與視圖相關(guān)的操作,完成窗口客戶區(qū)中的內(nèi)容的繪制工作。重要成員函數(shù): OnInitialUpdate():虛函數(shù),類似于第2章的API函數(shù)UpdateWindow()。當(dāng)窗口剛顯示在屏幕上時(shí)由MFC自動(dòng)調(diào)用,該函數(shù)要發(fā)出一條WM_PAINT消息,這是
17、應(yīng)用程序第一次發(fā)出該消息,作用是完成客戶區(qū)的初始顯示工作。我們可以重載它,實(shí)現(xiàn)客戶區(qū)的特定初始顯示。 OnDraw():虛函數(shù),當(dāng)程序收到WM_PAINT消息時(shí)由MFC自動(dòng)調(diào)用,專門進(jìn)行客戶區(qū)的重繪。如果我們希望程序能響應(yīng)WM_PAINT消息,就一定要重載它。32注意: OnDraw()函數(shù)只在客戶區(qū)變得“無效”(即發(fā)出WM_PAINT消息)的時(shí)候,由MFC自動(dòng)調(diào)用。具體的,有以下一些調(diào)用時(shí)機(jī): 窗口剛顯示出來時(shí) 窗口最小化后重新恢復(fù)顯示時(shí) 窗口被其他窗口遮住全部或一部分后重新顯示時(shí) 窗口被拖動(dòng)時(shí) 當(dāng)程序中調(diào)用CWnd:Invalidate()函數(shù)或Win32 API RedrawWindow()強(qiáng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年幼兒園安全教育工作總結(jié)范例(四篇)
- 2024年衛(wèi)生工作總結(jié)范本(五篇)
- 2024年小學(xué)六年級(jí)新學(xué)期學(xué)習(xí)計(jì)劃范例(三篇)
- 2024年學(xué)前班數(shù)學(xué)教學(xué)計(jì)劃例文(三篇)
- 2024年幼兒園后勤人員工作計(jì)劃范本(四篇)
- 2024年學(xué)生會(huì)主席工作計(jì)劃樣本(二篇)
- 2024年小學(xué)班主任個(gè)人工作總結(jié)參考(三篇)
- 2024年幼兒園保健醫(yī)師工作計(jì)劃(二篇)
- 2024年員工個(gè)人學(xué)習(xí)計(jì)劃例文(四篇)
- 2024年安全生產(chǎn)專項(xiàng)資金使用制度樣本(二篇)
- 質(zhì)量保證體系評(píng)價(jià)-評(píng)價(jià)表(ASES-ver.1.6)
- 短視頻的拍攝與剪輯
- 【題型專項(xiàng)特訓(xùn)】三年級(jí)數(shù)學(xué)上冊(cè)第五單元倍的認(rèn)識(shí)專項(xiàng)訓(xùn)練-解答題(人教版含答案)
- 2023年甘肅省定西岷縣選聘村文書125人筆試參考題庫(kù)(共500題)答案詳解版
- 幼兒園一日保育生活的組織與實(shí)施的方案1
- ABB工業(yè)機(jī)器人離線編程與虛擬仿真- 課件 項(xiàng)目六 工業(yè)機(jī)器人弧焊離線仿真
- 數(shù)據(jù)中臺(tái)與數(shù)據(jù)治理服務(wù)方案
- (醫(yī)學(xué)課件)全院血糖管理
- 預(yù)防主治系列-計(jì)劃生育-終止早期妊娠
- 快速康復(fù)外科(ERAS)護(hù)理
- 第六章-巷道支護(hù)01
評(píng)論
0/150
提交評(píng)論