C++課件:MFC編程基礎(chǔ)_第1頁
C++課件:MFC編程基礎(chǔ)_第2頁
C++課件:MFC編程基礎(chǔ)_第3頁
C++課件:MFC編程基礎(chǔ)_第4頁
C++課件:MFC編程基礎(chǔ)_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、MFC概述2、MFC層次結(jié)構(gòu)及其子類功能3、MFC應(yīng)用程序架構(gòu)4、基于框架的MFC應(yīng)用程序分析7/31/20231MFC編程基礎(chǔ)MFC:Microsoft

Foundation

Class首先:它是一個(gè)類庫、功能是控制整個(gè)計(jì)算機(jī)系統(tǒng)。其次:它是一個(gè)面向?qū)ο蟮膽?yīng)用程序框架,程序員可以使用這一框架創(chuàng)建

Windows應(yīng)用程序。同時(shí):MFC的組織是以C++類層次形式組織起來的,幾個(gè)高層類提供一般功能,

而低層類實(shí)現(xiàn)更具體的功能,每一個(gè)低層類都是從高層類派生而來,因此繼承了高層類的功能。7/31/2023216.1

MFC概述所以:MFC是一種類的層次結(jié)構(gòu),它提供了一個(gè)應(yīng)用程序開發(fā)框架,此框架稱為文檔/視圖架構(gòu)。它對應(yīng)的是Windows系統(tǒng)目錄下的一系列mfc*.dll文件。7/31/20233MFC就是利用面向?qū)ο蟮乃枷?,將?shù)據(jù)類型與Windows大部分API函數(shù)封裝起來的一個(gè)浩瀚的類庫,利用MFC編寫程序本質(zhì)上就是選擇該類庫中合適的類,并調(diào)用其下相應(yīng)成員函數(shù)來完成某個(gè)功能。7/31/20234MFC的實(shí)質(zhì)Win32數(shù)據(jù)類型7/31/202351、Windows消息函數(shù)

2、文件處理函數(shù)3、網(wǎng)絡(luò)函數(shù)4、菜單函數(shù)5、文本與字體函數(shù)6、硬件與系統(tǒng)函數(shù)7、控件和消息函數(shù)8、位圖、圖標(biāo)和光柵運(yùn)算函數(shù)9、繪圖函數(shù)10、打印函數(shù)11、設(shè)備場景函數(shù)12、進(jìn)程和線程函數(shù)7/31/20236Win32API接口函數(shù)程序員如何去學(xué)習(xí)MFC7/31/202371、C++語言基礎(chǔ)2、Windows操作系統(tǒng)基礎(chǔ)3、面向?qū)ο蟪绦蛴^念的基礎(chǔ)抽象、封裝、繼承、多態(tài)站在OS角度上看程序7/31/202381、執(zhí)行程序的過程是OS完成任務(wù)的過程2、程序執(zhí)行一次是創(chuàng)建了一個(gè)進(jìn)程,申請了一個(gè)獨(dú)立的內(nèi)存空間。3、程序和OS是通過事件驅(qū)動(dòng)、消息機(jī)制通信的4、一個(gè)程序必有一個(gè)WinMain函數(shù)5、一個(gè)程序必有一個(gè)窗口,進(jìn)行輸入輸出6、一個(gè)程序的啟動(dòng)過程,就是一個(gè)WinMain函數(shù)的加載過程7、一個(gè)程序至少由兩部分組成:

WinMain、WndProc面向?qū)ο笥^點(diǎn)看待Windows編程7/31/202391、具有應(yīng)用程序?qū)ο?,功能包括:注冊窗口(填充窗口結(jié)構(gòu),注冊窗口),初始化程序?qū)嵗▌?chuàng)建、顯示、刷新)。2、具有窗口對象,功能相當(dāng)于WndPro函數(shù)3、保留WinMain函數(shù),實(shí)現(xiàn)消息循環(huán)。4、最好實(shí)現(xiàn)數(shù)據(jù)與顯示分離?!鲇妹嫦?qū)ο笥^點(diǎn)重組API1、API是WIN32編程的重要基礎(chǔ)2、關(guān)于應(yīng)用程序?qū)ο?、關(guān)于框架窗口對象4、關(guān)于視圖對象5、關(guān)于文檔對象(數(shù)據(jù)與顯示分離)6、關(guān)于其它對象的API*重點(diǎn)是類和對象的概念關(guān)系*7/31/20231016.2

MFC層次結(jié)構(gòu)7/31/202311MFC是一個(gè)包含了超過200個(gè)不同類的很龐大的類庫。利用他們,開發(fā)者可以完成許多標(biāo)準(zhǔn)的Windows編程任務(wù),并且可以在應(yīng)用程序中加入許多復(fù)雜的特性。在設(shè)計(jì)思想上,MFC將面向?qū)ο蟮姆椒ㄅc事件驅(qū)動(dòng)結(jié)合得很好,因此要理解龐大的MFC類庫中的常用類的功能,要利用面向?qū)ο蟮乃枷脒M(jìn)行理解和分析。7/31/202312MFC中類的層次結(jié)構(gòu)MFC的優(yōu)點(diǎn)1、MFC對于類、類的繼承、封裝、多態(tài)性、類間關(guān)系和相互作用等

應(yīng)用程序特性都有具體體現(xiàn),可

以使開發(fā)者高效、輕松地建立

Windows應(yīng)用程序,而不受設(shè)備限制并且由事件進(jìn)行驅(qū)動(dòng)。7/31/2023132、MFC具有良好的通用性和可移植性,它定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的工作就是通過VC所提供的各種工具來完成這個(gè)工作。7/31/2023141、根類CObject7/31/202315CObject類是MFC的抽象基類(不能派生對象),是MFC中多數(shù)類和用戶自定義類的根類,它為程序員提供了許多公共操作和基本服務(wù)。主要包括:對象的動(dòng)態(tài)建立與刪除、序列化(即串行化)的支持、對象診斷輸出、運(yùn)行時(shí)信息管理以及集合類的兼容等。作用是,使得MFC以及基于MFC的應(yīng)用程序更加穩(wěn)固和易于調(diào)試。根類CObject的組成7/31/2023162、消息映射類CCmdTarget7/31/202317該類是CObject的子類,是MFC類庫中所有具有消息映射屬性的基類,消息映射規(guī)定了當(dāng)對象接到命令消息時(shí),應(yīng)調(diào)用哪一個(gè)函數(shù)對該消息進(jìn)行處理。由CCmdTarget派生出的主框架類包括

CView、CWinApp、CDocument、CWnd和CframeWnd都可處理命令消息。程序員若需要一個(gè)新類來處理消息時(shí),可以從CCmdTarget派生出一個(gè)新類。一般程序員很少從CCmdTarget類中直接派生出新類,而是從其子類CView、CWinApp來派生消息映射類CCmdTarget組成7/31/202318每一個(gè)使用MFC的應(yīng)用程序只能包含一個(gè)從CWinApp派生的應(yīng)用程序?qū)ο?,?dāng)VC的其它全局對象被構(gòu)造時(shí),這個(gè)對象也同時(shí)被構(gòu)造,當(dāng)

Windows調(diào)用WinMain()函數(shù)時(shí),產(chǎn)生的對象已經(jīng)有效了。從CWinApp實(shí)例化的應(yīng)用程序?qū)ο笫且粋€(gè)全局變量,在程序運(yùn)行中該對象可以與其它對象相互協(xié)調(diào)。7/31/2023193、窗口應(yīng)用程序類CWinApp訪問CWinApp對象以及全局函數(shù)。

AfxGetApp:獲得一指向CWinApp對象的指針AfxGetResourceHabdle:獲得一應(yīng)用程序資源的句柄。AfxGetAppName:獲得指向一個(gè)包含應(yīng)用程序名的字符串的指針。CWinApp的公共數(shù)據(jù)成員

m_pszAppName:指定應(yīng)用程序的名稱。

m_nCmdShow:指定窗口的顯示方式。

m_pMainWnd:包含一個(gè)指針,它指向一個(gè)應(yīng)用程序的主窗口。7/31/2023204、應(yīng)用程序類CWinApp組成(3)CWinApp的公共成員函數(shù)

LoadCursor:調(diào)取光標(biāo)資源。

LoadStandardCursor:調(diào)取Windows預(yù)定義光標(biāo),在windows.h中指定IDC常量。LoadIcon:調(diào)取一個(gè)圖標(biāo)資源。

LoadStandardIcon:調(diào)取Windows預(yù)定義的圖標(biāo),在windows.h中指定IDI常量。OpenDocumentFile:框架調(diào)用此函數(shù)打開一個(gè)指定的文檔。7/31/202321(4)CWinApp的可超載的函數(shù)

InitApplication:重載以執(zhí)行任何應(yīng)用程序?qū)哟紊系某跏蓟?。InitInstance:重載以執(zhí)行Windows對象實(shí)例的初始化,諸如建立用戶窗口對象等。Run:運(yùn)行缺省的消息循環(huán),重載該函數(shù)以自定義消息循環(huán)。OnIdle:重載以執(zhí)行任何應(yīng)用程序指定的空閑時(shí)間處理。PreTranslateMessage:在窗口消息被

TranslateMessage()和DispatchMessage()處理之前過濾它們。7/31/202322該類為線程的基類,CWinApp是從CWinThread派生

而來。該對象描述程序線程的執(zhí)行,主線程的執(zhí)行通常由一個(gè)CWinApp的派生對象提供。CWinThread的公共數(shù)據(jù)成員

m_hThread:當(dāng)前線程的句柄。

m_nThreadID:當(dāng)前線程的ID值。

m_pMainWnd:指向程序主窗口指針。CWinThread的公共成員函數(shù)GetMainWnd:獲取一個(gè)指向此線程的的主窗口指針。GetThreadPriority:獲取當(dāng)前線程的優(yōu)先權(quán)。ResumeThread:減小一個(gè)線程的掛起計(jì)數(shù)。7/31/2023235、應(yīng)用程序線程類CWinThread?6、文檔/視圖類文檔對象由文檔模板對象創(chuàng)建,管理應(yīng)用程序的數(shù)據(jù)。視圖對象表示一個(gè)窗口的客戶區(qū),它顯示文檔數(shù)據(jù)并允許用戶與之交互。CDocTemplate類:文檔模板的基類。它負(fù)責(zé)協(xié)調(diào)文檔、視窗和框架窗口的創(chuàng)建。CMultiDocTemplate類:多文檔界面(MDI)的文檔模板。CSingleDocTemplate類:單文檔界面

(SDI)的文檔模板。CDocument:應(yīng)用程序所用文檔的基類。

CView:顯示文檔數(shù)據(jù)的應(yīng)用程序?qū)S靡晥D的基類。7/31/202324CFrameWnd類CFrameWndCMDIFrameWndCMDIChildWnd8.視圖類CViewCScrollViewCFormViewCRecordViewCEditView7/31/2023259.對話框類7/31/202326由于對話框是一個(gè)特殊窗口,所以該類是從CWnd類中派生出來的。對話框子層次結(jié)構(gòu)包括通用對話框類CDialog以及支持字體選擇、打印、替換文本等公共對話框子類。CDialogCCommonDialogCFileDialogCColorDialogCFontDialogCPrintDialog?10.控件類控件類包含若干個(gè)可視控件,使用這些類可建立靜態(tài)文本、命令按鈕、位圖按鈕、列表框、組合框、滾動(dòng)條和編輯框等,這些可視控件為Windows應(yīng)用程序提供了各種輸入和顯示界面。(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、是被應(yīng)用程序開發(fā)者定制的應(yīng)用骨架。3、是一個(gè)可復(fù)用的設(shè)計(jì)組件。應(yīng)用程序架構(gòu)包括應(yīng)用程序的總體組織和全局控制、通訊協(xié)議、同步、數(shù)據(jù)存取,給設(shè)計(jì)元素分配特定功能,設(shè)計(jì)元素的組織,規(guī)模和性能,以及在各個(gè)設(shè)計(jì)方案間進(jìn)行選擇。7/31/20232816.3

MFC應(yīng)用程序架構(gòu)應(yīng)用程序架構(gòu)本質(zhì)上是一種軟件高層次復(fù)用,它可以在具有相似需求的多個(gè)系統(tǒng)中得到復(fù)用,這比代碼級的復(fù)用具有更大的意義應(yīng)用程序架構(gòu)屏蔽了系統(tǒng)底層技術(shù),需要用戶具有更為扎實(shí)的基本功,無形之中限制了用戶的思維。7/31/202329MFC應(yīng)用程序架構(gòu)優(yōu)缺點(diǎn)16.4基于MFC框架的應(yīng)用程序?qū)嵗?/31/202330基于MFC框架的應(yīng)用程序?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()};五個(gè)類的具體實(shí)現(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論