




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、MFC概述2、MFC層次結(jié)構(gòu)及其子類功能3、MFC應用程序架構(gòu)4、基于框架的MFC應用程序分析7/31/20231MFC編程基礎(chǔ)MFC:Microsoft
Foundation
Class首先:它是一個類庫、功能是控制整個計算機系統(tǒng)。其次:它是一個面向?qū)ο蟮膽贸绦蚩蚣?,程序員可以使用這一框架創(chuàng)建
Windows應用程序。同時:MFC的組織是以C++類層次形式組織起來的,幾個高層類提供一般功能,
而低層類實現(xiàn)更具體的功能,每一個低層類都是從高層類派生而來,因此繼承了高層類的功能。7/31/2023216.1
MFC概述所以:MFC是一種類的層次結(jié)構(gòu),它提供了一個應用程序開發(fā)框架,此框架稱為文檔/視圖架構(gòu)。它對應的是Windows系統(tǒng)目錄下的一系列mfc*.dll文件。7/31/20233MFC就是利用面向?qū)ο蟮乃枷?,將?shù)據(jù)類型與Windows大部分API函數(shù)封裝起來的一個浩瀚的類庫,利用MFC編寫程序本質(zhì)上就是選擇該類庫中合適的類,并調(diào)用其下相應成員函數(shù)來完成某個功能。7/31/20234MFC的實質(zhì)Win32數(shù)據(jù)類型7/31/202351、Windows消息函數(shù)
2、文件處理函數(shù)3、網(wǎng)絡函數(shù)4、菜單函數(shù)5、文本與字體函數(shù)6、硬件與系統(tǒng)函數(shù)7、控件和消息函數(shù)8、位圖、圖標和光柵運算函數(shù)9、繪圖函數(shù)10、打印函數(shù)11、設備場景函數(shù)12、進程和線程函數(shù)7/31/20236Win32API接口函數(shù)程序員如何去學習MFC7/31/202371、C++語言基礎(chǔ)2、Windows操作系統(tǒng)基礎(chǔ)3、面向?qū)ο蟪绦蛴^念的基礎(chǔ)抽象、封裝、繼承、多態(tài)站在OS角度上看程序7/31/202381、執(zhí)行程序的過程是OS完成任務的過程2、程序執(zhí)行一次是創(chuàng)建了一個進程,申請了一個獨立的內(nèi)存空間。3、程序和OS是通過事件驅(qū)動、消息機制通信的4、一個程序必有一個WinMain函數(shù)5、一個程序必有一個窗口,進行輸入輸出6、一個程序的啟動過程,就是一個WinMain函數(shù)的加載過程7、一個程序至少由兩部分組成:
WinMain、WndProc面向?qū)ο笥^點看待Windows編程7/31/202391、具有應用程序?qū)ο?,功能包括:注冊窗口(填充窗口結(jié)構(gòu),注冊窗口),初始化程序?qū)嵗▌?chuàng)建、顯示、刷新)。2、具有窗口對象,功能相當于WndPro函數(shù)3、保留WinMain函數(shù),實現(xiàn)消息循環(huán)。4、最好實現(xiàn)數(shù)據(jù)與顯示分離?!鲇妹嫦?qū)ο笥^點重組API1、API是WIN32編程的重要基礎(chǔ)2、關(guān)于應用程序?qū)ο?、關(guān)于框架窗口對象4、關(guān)于視圖對象5、關(guān)于文檔對象(數(shù)據(jù)與顯示分離)6、關(guān)于其它對象的API*重點是類和對象的概念關(guān)系*7/31/20231016.2
MFC層次結(jié)構(gòu)7/31/202311MFC是一個包含了超過200個不同類的很龐大的類庫。利用他們,開發(fā)者可以完成許多標準的Windows編程任務,并且可以在應用程序中加入許多復雜的特性。在設計思想上,MFC將面向?qū)ο蟮姆椒ㄅc事件驅(qū)動結(jié)合得很好,因此要理解龐大的MFC類庫中的常用類的功能,要利用面向?qū)ο蟮乃枷脒M行理解和分析。7/31/202312MFC中類的層次結(jié)構(gòu)MFC的優(yōu)點1、MFC對于類、類的繼承、封裝、多態(tài)性、類間關(guān)系和相互作用等
應用程序特性都有具體體現(xiàn),可
以使開發(fā)者高效、輕松地建立
Windows應用程序,而不受設備限制并且由事件進行驅(qū)動。7/31/2023132、MFC具有良好的通用性和可移植性,它定義了應用程序的輪廓,并提供了用戶接口的標準實現(xiàn)方法,程序員所要做的工作就是通過VC所提供的各種工具來完成這個工作。7/31/2023141、根類CObject7/31/202315CObject類是MFC的抽象基類(不能派生對象),是MFC中多數(shù)類和用戶自定義類的根類,它為程序員提供了許多公共操作和基本服務。主要包括:對象的動態(tài)建立與刪除、序列化(即串行化)的支持、對象診斷輸出、運行時信息管理以及集合類的兼容等。作用是,使得MFC以及基于MFC的應用程序更加穩(wěn)固和易于調(diào)試。根類CObject的組成7/31/2023162、消息映射類CCmdTarget7/31/202317該類是CObject的子類,是MFC類庫中所有具有消息映射屬性的基類,消息映射規(guī)定了當對象接到命令消息時,應調(diào)用哪一個函數(shù)對該消息進行處理。由CCmdTarget派生出的主框架類包括
CView、CWinApp、CDocument、CWnd和CframeWnd都可處理命令消息。程序員若需要一個新類來處理消息時,可以從CCmdTarget派生出一個新類。一般程序員很少從CCmdTarget類中直接派生出新類,而是從其子類CView、CWinApp來派生消息映射類CCmdTarget組成7/31/202318每一個使用MFC的應用程序只能包含一個從CWinApp派生的應用程序?qū)ο?,當VC的其它全局對象被構(gòu)造時,這個對象也同時被構(gòu)造,當
Windows調(diào)用WinMain()函數(shù)時,產(chǎn)生的對象已經(jīng)有效了。從CWinApp實例化的應用程序?qū)ο笫且粋€全局變量,在程序運行中該對象可以與其它對象相互協(xié)調(diào)。7/31/2023193、窗口應用程序類CWinApp訪問CWinApp對象以及全局函數(shù)。
AfxGetApp:獲得一指向CWinApp對象的指針AfxGetResourceHabdle:獲得一應用程序資源的句柄。AfxGetAppName:獲得指向一個包含應用程序名的字符串的指針。CWinApp的公共數(shù)據(jù)成員
m_pszAppName:指定應用程序的名稱。
m_nCmdShow:指定窗口的顯示方式。
m_pMainWnd:包含一個指針,它指向一個應用程序的主窗口。7/31/2023204、應用程序類CWinApp組成(3)CWinApp的公共成員函數(shù)
LoadCursor:調(diào)取光標資源。
LoadStandardCursor:調(diào)取Windows預定義光標,在windows.h中指定IDC常量。LoadIcon:調(diào)取一個圖標資源。
LoadStandardIcon:調(diào)取Windows預定義的圖標,在windows.h中指定IDI常量。OpenDocumentFile:框架調(diào)用此函數(shù)打開一個指定的文檔。7/31/202321(4)CWinApp的可超載的函數(shù)
InitApplication:重載以執(zhí)行任何應用程序?qū)哟紊系某跏蓟?。InitInstance:重載以執(zhí)行Windows對象實例的初始化,諸如建立用戶窗口對象等。Run:運行缺省的消息循環(huán),重載該函數(shù)以自定義消息循環(huán)。OnIdle:重載以執(zhí)行任何應用程序指定的空閑時間處理。PreTranslateMessage:在窗口消息被
TranslateMessage()和DispatchMessage()處理之前過濾它們。7/31/202322該類為線程的基類,CWinApp是從CWinThread派生
而來。該對象描述程序線程的執(zhí)行,主線程的執(zhí)行通常由一個CWinApp的派生對象提供。CWinThread的公共數(shù)據(jù)成員
m_hThread:當前線程的句柄。
m_nThreadID:當前線程的ID值。
m_pMainWnd:指向程序主窗口指針。CWinThread的公共成員函數(shù)GetMainWnd:獲取一個指向此線程的的主窗口指針。GetThreadPriority:獲取當前線程的優(yōu)先權(quán)。ResumeThread:減小一個線程的掛起計數(shù)。7/31/2023235、應用程序線程類CWinThread?6、文檔/視圖類文檔對象由文檔模板對象創(chuàng)建,管理應用程序的數(shù)據(jù)。視圖對象表示一個窗口的客戶區(qū),它顯示文檔數(shù)據(jù)并允許用戶與之交互。CDocTemplate類:文檔模板的基類。它負責協(xié)調(diào)文檔、視窗和框架窗口的創(chuàng)建。CMultiDocTemplate類:多文檔界面(MDI)的文檔模板。CSingleDocTemplate類:單文檔界面
(SDI)的文檔模板。CDocument:應用程序所用文檔的基類。
CView:顯示文檔數(shù)據(jù)的應用程序?qū)S靡晥D的基類。7/31/202324CFrameWnd類CFrameWndCMDIFrameWndCMDIChildWnd8.視圖類CViewCScrollViewCFormViewCRecordViewCEditView7/31/2023259.對話框類7/31/202326由于對話框是一個特殊窗口,所以該類是從CWnd類中派生出來的。對話框子層次結(jié)構(gòu)包括通用對話框類CDialog以及支持字體選擇、打印、替換文本等公共對話框子類。CDialogCCommonDialogCFileDialogCColorDialogCFontDialogCPrintDialog?10.控件類控件類包含若干個可視控件,使用這些類可建立靜態(tài)文本、命令按鈕、位圖按鈕、列表框、組合框、滾動條和編輯框等,這些可視控件為Windows應用程序提供了各種輸入和顯示界面。(1)CStatic(2)CButton(3)CEdit(4)CScrollBar(5)CSliderCtrl(6)CListBox
(7)CComboBoxl(8)CBitmapButton
(9)CAnimateCtrl(10)
CTreeCtrl(11)CListCtrl7/31/2023271、是一種編程模型。2、是被應用程序開發(fā)者定制的應用骨架。3、是一個可復用的設計組件。應用程序架構(gòu)包括應用程序的總體組織和全局控制、通訊協(xié)議、同步、數(shù)據(jù)存取,給設計元素分配特定功能,設計元素的組織,規(guī)模和性能,以及在各個設計方案間進行選擇。7/31/20232816.3
MFC應用程序架構(gòu)應用程序架構(gòu)本質(zhì)上是一種軟件高層次復用,它可以在具有相似需求的多個系統(tǒng)中得到復用,這比代碼級的復用具有更大的意義應用程序架構(gòu)屏蔽了系統(tǒng)底層技術(shù),需要用戶具有更為扎實的基本功,無形之中限制了用戶的思維。7/31/202329MFC應用程序架構(gòu)優(yōu)缺點16.4基于MFC框架的應用程序?qū)嵗?/31/202330基于MFC框架的應用程序?qū)嵗?/31/2023317/31/2023327/31/2023337/31/2023347/31/2023357/31/2023367/31/2023377/31/2023387/31/2023397/31/2023407/31/202341class
CAboutDlg
:
public
CDialog{public:CAboutDlg();//
Dialog
Data//{{AFX_DATA(CAboutDlg)enum
{
IDD
=
IDD_ABOUTBOX
};//}}AFX_DATA//
ClassWizard
generated
virtual
function
overrides//{{AFX_VIRTUAL(CAboutDlg)protected:?7/31/202342//
DDX/DDVvirtual
void
DoDataExchange(CDataExchange*
pDX);support//}}AFX_VIRTUAL//
Implementationprotected://{{AFX_MSG(CAboutDlg)//
No
message
handlers//}}AFX_MSGDECLARE_MESSAGE_MAP()};五個類的具體實現(xiàn)//
DO
NOT
EDIT
what
you
see
in
these
blocks
of
generated
code
!//}}AFX_MSGDECLARE_MESSAGE_MAP()7/31/202343class
CHelloWApp
:
public
CWinApp{public:CHelloWApp();//
Overrides//
ClassWizard
generated
virtual
function
overrides//{{AFX_VIRTUAL(CHelloWApp)public:virtual
BOOL
InitInstance();//}}AFX_VIRTUAL//
Implementation//{{AFX_MSG(CHelloWApp)afx_msg
void
OnAppAbout();//
NOTE
-
the
ClassWizard
will
add
and
remove
member
functions
here.???};class
CHelloWDoc
:
public
CDocument{protected:
//
create
from
serialization
onlyCHelloWDoc();DECLARE_DYNCREATE(CHelloWDoc)//
Attributespublic://
Operationspublic://
Overrides//
ClassWizard
generated
virtual
function
overrides//{{AFX_VIRTUAL(CHelloWDoc)public:virtual
BOOL
OnNewDocument();virtual
void
Serialize(CArchive&
ar);//}}AFX_VIRTUAL7/31/202344//
Implementationpublic:virtual
~CHelloWDoc();#ifdef
_DEBUGvirtual
void
AssertValid()
const;virtual
void
Dump(CDumpContext&
dc)
const;#endifprotected://
Generated
message
map
functionsprotected://{{AFX_MSG(CHelloWDoc)
//
NOTE
-
the
ClassWizard
will
add
and
remove
memberfunctions
here.7/31/202345?//
DO
NOT
EDIT
what
you
see
in
these
blocks
of
generated//}}AFX_MSGDECLARE_MESSAGE_MAP()code
!??};class
CHelloWView
:
publicCView{protected:
//
create
from
serializationonlyCHelloWView();DECLARE_DYNCREATE(CHelloWView)//
Attributespublic:CHelloWDoc*
GetDocument();//
Operationspublic://
Overrides//
ClassWizard
generated
virtual
function
overrides//{{AFX_VIRTUAL(CHelloWView)public:virtual
void
OnDraw(CDC*
pDC);
//
overridden
to
draw
this
viewvirtual
BOOL
PreCreateWindow(CREATESTRUCT&
cs);protected:virtual
BOOL
OnPreparePrinting(CPrintInfo*
pInfo);virtual
void
OnBeginPrinting(CDC*
pDC,
CPrintInfo*
pInfo);virtual
void
OnEndPrinting(CDC*
pDC,
CPrintInfo*
pInfo);//}}AFX_VIRTUAL7/31/202346//
Implementationpublic:virtual~CHelloWView();#ifdef
_DEBUGvirtual
void
AssertValid()
const;virtual
void
Dump(CDumpContext&
dc)
const;#endifprotected://
Generated
message
map
functionsprotected://{{AFX_MSG(CHelloWView)
//
NOTE
-
the
ClassWizard
will
add
and
removemember
functions
here.7/31/202347?//generated
code
!//}}AFX_MSGDO
NOT
EDIT
what
you
see
in
these
blocks
of??};DECLARE_MESSAGE_MAP()?7/31/202348class
CMainFrame
:
public
CFrameWnd{protected:
//
create
from
serialization
onlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)//
Attributespublic://
Operationspublic://
Overrides//
ClassWizard
generated
virtual
function
overrides//{{AFX_VIRTUAL(CMainFrame)
virtual
BOOL
PreCreateWindow(CREATESTRUCT&cs);//}}AFX_VIRTUAL//
Implementationpublic:virtual
~CMainFrame();#ifdef
_DEBUGvirtual
void
AssertValid()
const;virtual
void
Dump(CDumpContext&
dc)
const;#endifprotected:
//
control
bar
embedded
membersCStatusBar
m_wndStatusBar;CToolBar
m_wndToolBar;//
Generated
message
map
functionsprotected://{{AFX_MSG(CMainFrame)afx_msg
int
OnCreate(LPCREATESTRUCT
lpCreateStruct);
//
NOTE
-
the
ClassWizard
will
add
and
remove
member
functionshere.//
DO
NOT
EDIT
what
you
see
in
these
blocks
of
generated
code!//}}AFX_MSGDECLARE_MESSAGE_MAP()};7/31/2023491、類與對象關(guān)系?
2、Winmain函數(shù)?3、對象如何創(chuàng)建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 圍墻施工合同協(xié)議
- 房屋車庫買賣合同
- 小程序銷售服務合同
- 砂石車輛運輸合同
- 2025年幼兒園瑤族舞曲音樂標準教案
- 建筑工程股東合作協(xié)議書
- 文化傳媒咨詢服務合同
- 工地建筑施工合同
- 國際貿(mào)易服務協(xié)議
- 南山陽光房防水施工方案
- 兩層鋼結(jié)構(gòu)廠房施工方案
- 支氣管封堵器在胸科手術(shù)中的應用
- 班級凝聚力主題班會12
- 初中語文“經(jīng)典誦讀與海量閱讀”校本課程實施方案
- 北京市東城區(qū)2021-2022學年第一學期四年級期末考試語文試卷(含答案)
- 2025 春夏·淘寶天貓運動戶外行業(yè)趨勢白皮書
- 西門子S7-1200 PLC應用技術(shù)項目教程(第3版) 課件 1.認識S7-1200PLC寬屏-(LAD+SCL)
- 《稅法》(第六版)全書教案電子講義
- 翻斗車司機安全培訓
- 計算機軟件配置管理計劃規(guī)范
- 《勞動保障監(jiān)察條例》課件
評論
0/150
提交評論