版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Windows編程基礎東軟人才實訓中心Copyright
2010
By
Neusoft
Group.s本課程旨在向學員介紹:掌握GDI基礎應用掌握框架應用程序開發(fā)過程深入透徹理解框架應用程序時間:學時6教學方法:講授+課上練習+課
業(yè)第七章GDI基礎及框架應用程序解析2從需求開始編寫一個單文檔應用程序,程序運行后界面顯示:”這是一個單文檔應用程序!”.3三種典型的Visual
C++應用程序使用AppWizard創(chuàng)建項目時可以選擇三種類型的應用界面即單文檔、多文檔和基于
框的應用程序。單文檔程序一次只能打開一個文件或文檔,如記事本程序。多文檔程序一次可以打開多個文檔,如word程序。使用AppWizard創(chuàng)建單文檔和多文檔程序幾乎一樣,差別在于:在創(chuàng)建SDI界面的應用程序時,生成CMainFrame類,CMainFrame類的基類為CFrameWnd在創(chuàng)建MDI界面的應用程序時,CMainFrame類的基類為CMDIFrameWnd,生成CMDIChildWnd類45每次當視窗需要被重新繪制時,應用程序框架就要調用OnDraw函數(shù)。驅使程序調用OnDraw的兩個途徑:用戶改變窗口的尺寸;窗口恢復先前被遮蓋的部分;應用程序改變了窗口數(shù)據(jù);程序中調用Invalidate(或者InvalidateRect),通知Windows調用OnDraw函數(shù)OnDraw成員函數(shù)應用程序框架涉及的主要類-1/2MFC中有許多類,但
數(shù)幾個
的類會對應用程序的基本框架產(chǎn)生影響,它們分別是CWinAppCCViewCFrameWndCDocTemplate這5個類構成了大部分MFC文檔/視圖框架應用程序的
,6應用程序框架涉及的主要類-2/2MFC并不是直接利用這些類生成框架,而是使用他們的派生類。派生類C
oAppCMainFrameC
oDocC
oView基類CWinAppCFrameWndCCView使用派生類優(yōu)點繼承基類功能繼承了框架方便增加新功能78應用程序類和框架窗口類應用程序類(CWinApp):用MFC編寫的程序中唯一必不可少的類就是CWinApp,它控制程序的流程??蚣艽翱?CFrameWnd)框架窗口是應用程序的頂層窗口,通常是WS_OVERLAPPEDWINDOW樣式的窗口,帶有可縮放邊框,標題欄、系統(tǒng)菜單以及最小化、最大化和關閉按鈕,它擔當了視圖的容器SDI應用程序只有一個框架窗口CFrameWnd,它被用作應用程序的頂層窗口并來包含視圖。MDI應用程序使用兩種不同類型的框架窗口,其中CMDIFrameWnd用作頂層窗口,而CMDIChildWnd在頂層窗口中浮動用來包含應用程序文檔的視圖文檔類-1/2在文檔/視圖結構中,文檔是用來管理和組織數(shù)據(jù)的。C
類支持文檔的標準操作,為了在應用程序中處理文檔,首先應該從C己的文檔類,并且在類中類派生出一個屬于自一些成員變量,用來存放數(shù)據(jù);然后完成 和修改文檔數(shù)據(jù)的成員函數(shù);最后再至少重載專門負責文件讀寫操作的Serialize(
)函數(shù)。9文檔類-2/2在使用MFC創(chuàng)建新的應用程序框架時,AppWizard準備好了文檔類的空殼class
C oDoc
:
public
C{
protected:C
oDoc();oDoc)DECLARE_DYNCREATE(Cpublic:virtual
BOOLOnNew();virtual
void
Serialize(CArchive&
ar);……};1011視圖類-1/4在文檔/視圖結構中,視圖的作用是顯示和編輯文檔數(shù)據(jù),提供用戶與文檔數(shù)據(jù)的交互接口。視圖在MFC的CView類里被實例化。在開發(fā)應用程序時,應該從CView類派生出一個屬于自己的視圖類,并且在類中至少改寫專門負責顯示數(shù)據(jù)的OnDraw()函數(shù)或OnPrint()函數(shù)。12視圖類-2/4class
C oView:public
CView//派生出一個屬于自己的視圖類{protected:
//
create
from
serialization
onlyC
oView();DECLARE_DYNCREATE(Cpublic:oView)CMyDoc*
Get
();//得到與之相關聯(lián)的文檔對象的指針public:virtual
void
OnDraw(CDC*
pDC);//負責顯示數(shù)據(jù)的OnDraw()函數(shù)virtual
BOOL
PreCreateWindow(CREATESTRUCT&
cs);protected:virtual
BOOLOnPreparePrinting(CPrintInfo*
pInfo);virtual
void
OnBeginPrintin C*
pDC,
CPrintInfo*
pInfo);public:視圖類-3/4CView類和它的9個派生類封裝了視圖的各種不同的功能,它們?yōu)橛脩魧崿F(xiàn)
的Windows特性提供了很大的便利。這些派生視圖類也可以作為用戶程序中視圖類的基類,而將這些視圖類設置為基類的最基本的方法是在MFCAPPWizard創(chuàng)建SDI/MDI的第6步中進行基類的選擇。這些視圖類如下表所示。13視圖類-4/414框架窗口、文檔、視圖類關系15文檔模板(
Template)文檔模板定義了文檔、視圖和框架窗口這3個類的關系。MFC提供了一個文檔模板類CDocTemplate支持文檔模板。文檔模板類是一個抽象的基類,它定義了文檔模板的基本處理函數(shù)接口。由于它是一個抽象基類,因此不能直接用它來定義對象而必需用它的派生類。對一個單文檔界面程序,使用CSingleDocTemplate類,而對于一個多文檔界面程序,使用CMultipleDocTemplate類。1617應用實例應用實例1:小球運動基礎版,實現(xiàn)小球從左上角到右下角移動應用實例2:小球運動升級版,當小球碰到邊界是,實現(xiàn)反彈功能。圖形設備接口Windows操作系統(tǒng)具有豐富的圖形界面,可以說圖形是
Windows應用程序的主體,這些圖形包括一般的幾何圖形、位圖、光標形狀、甚至文本。為了實現(xiàn)Windows應用程序的圖形化,Windows操作系統(tǒng)提供了大量的函數(shù),實現(xiàn)繪圖要求,這些函數(shù)的集合, 稱之為圖形設備接口。GDI的結構:從程序員的角度來看,GDI由幾百個函數(shù)調用和一些相關的數(shù)據(jù)類型和宏組成。在GDI32.DLL中。(Window三大模塊:KERNEL32.DLL、USER32.DLL
、GDI32.DLL)18設備描述表-1/3在Windows應用程序中,應用程序的輸出并不直接面向物理設備,如顯示屏或 ,而是針對一個稱之為設備描述表(DeviceContext)的邏輯設備進行操作,設備環(huán)境與實際設備之間的信息傳送由Windows直接管理。設備描述表(DeviceContext簡稱為DC),也稱設備上下文、設備環(huán)境,是一種包含各種繪圖屬性(如前面所說的字體、顏色)和方法(即各種繪圖函數(shù))的數(shù)據(jù)結構,它定義了設備、畫圖工具和畫圖信息,它不僅可以繪制各種圖形,而且還可以確定在應用窗口中繪制圖形的方式和圖形的樣式,它是應用程序與輸出設備之間的橋梁。1920設備描述表-2/3如果想在一個圖形輸出設備上繪圖:首先獲得一個DC的句柄(類型:HDC)在GDI函數(shù)中將這個句柄作為一個參數(shù),告訴Windows你想在這個設備上進行繪圖。21設備描述表-3/3得到DC句柄后,Windows會使用默認的屬性值,然后將這些屬性值填入到設備表結構。可以通過設置設備描述表屬性的GDI函數(shù)改變這些屬性值。通過GDI獲取屬性信息函數(shù)可以取得這些屬性的當前值。還有其他的一些GDI繪圖函數(shù)可以實現(xiàn)在客戶區(qū)上繪圖。22MFC中的設備描述表在MFC編程中,設備描述表被封裝成類。在MFC編程方式中,程序員不用捕獲設備描述表句柄和調用GDI輸出函數(shù),而是通過創(chuàng)建一個設備描述表對象并調用它的成員函數(shù)來實現(xiàn)畫圖和文本顯示。MFC的CDC類將Windows設備描述表和獲取設備描述表句柄的GDI函數(shù)封裝在一起,而CDC的派生類如
CPaintDC和CClientDC則代表Windows應用程序使用不同類型的設備描述表。MFC中的設備描述表類-1/3CObjectCDCCClientDCCWindowDCCPaintDCCMetaFileDC2324MFC中的設備描述表類-2/3CDC
類它是所有設備描述表的基類.CPaintDC類這是創(chuàng)建響應WM_PAINT消息的DC,僅限于OnPaint處理程序,也就是說通常它在OnPaint應用程序的OnPaint函數(shù)中使用,注意OnPaint函數(shù)會調用OnDraw函數(shù)。CClientDC類這是客戶區(qū)設備描述表,在窗口中畫圖可以使用這個類(除了WM_PAINT消息外)。25MFC中的設備描述表類-3/3CWindowDC
類這是代表整個窗口的設備描述表,包括客戶區(qū)和非客戶區(qū)CMetaFileDC類這是代表Windows圖元文件的DC。CWindowD
aintDC、CClientDC比較繪圖區(qū)域不同用CPaintDC
和CClientDC
類的對象繪制圖形時,繪制區(qū)只能是客戶區(qū),而不能在非客戶區(qū);而CWindowDC
可以在非客戶區(qū)進行繪圖。繪圖坐標系不同在CWindowDC
繪圖類下,坐標系是建立在整個屏幕之上的,在像素坐標方式下,坐標原點在屏幕的左上角。而CPaintDC
和CClientDC
類的坐標系是建立在客戶區(qū)上的,在像素坐標方式下,坐標原點在客戶區(qū)的左上角。26CDC設備描述表屬性函數(shù)屬性缺省值設置函數(shù)獲取函數(shù)CDC::SetTextColorCDC::GetTextColor文本顏
lack當前畫筆BLACK_PENCDC::SelectObjectCDC::SelectObject當前畫刷WHITE_BRUSHCDC::SelectObjectCDC::SelectObject模式MM_TEXTCDC::SetMapModeCDC::GetMapMode…………27獲取和
設備描述表方法-1/3方法1:GetDC函數(shù)最常用的調用形式有兩種,一種是Windows
API
函數(shù)形式,如下:HDC
GetDC(HWND
hWnd
//
handle
to
window);––
該函數(shù)只有一個參數(shù),此參數(shù)是想要獲得的DC
所在的窗口的句柄,如果該參數(shù)為NULL,那么得到的DC
將是整個屏幕函數(shù)格式:int
ReleaseDC(HWND
hWnd,HDChDC
)另一種是CWnd
類的成員函數(shù),如下:CDC*
GetDC(
);int
ReleaseDC(
CDC*
pDC
);28獲取和
設備描述表方法-2/3方法2:BeginPaint函數(shù)其最常用的調用形式也有兩種,一種是Windows
API
函數(shù)形式,如下:HDC
BeginPaint(
HWND
hwnd,
LPPAINTSTRUCT
lpPaint
);–
該函數(shù)有兩個參數(shù),一個是需要重繪的窗口的句柄,另一個是指向結構PAINTSTRUCT
變量的指針。–函數(shù)格式:BOOL
EndPaint(HWND
hWnd,CONSTPAINTSTRUCT
*lpPaint
);另一種常用的形式是CWnd
類的成員函數(shù),如下:–
CDC*
BeginPaint(
LPPAINTSTRUCT
lpPaint
)–
函數(shù)格式:void
EndPaint(
LPPAINTSTRUCT
lpPaint);29獲取和
設備描述表方法-3/3方法3:直接構造CDC對象該方法是用 一個CDC
類或其派生類對象的方式來獲取。方法如下:CClientDC
dc(
CWnd*
);此時構造的是一個對象。這種方法實際上是間接使用了GetDC成員函數(shù)。因為當一個C++類
一個對象時,系統(tǒng)會自動調用該類的構造函數(shù),而在CClient類的構造函數(shù)中就調用了GetDC函數(shù)。當這個對象被
時,又會自動調用該類的析構函數(shù),在析構函數(shù)中則調用了ReleaseDC函數(shù),用例
設備描述表。30關于設備描述表使用說明當在棧上構造DC,若對象的生命周期結束,則它的析構函數(shù)會被自動調用,而且析構函數(shù)一旦被調用,設備描述表就會返回給Windows。當在堆上用new創(chuàng)建設備描述表(DC)時,要注意親自
設備描述表,如:CPaintDC
*
pDC=new
CPaintDC(this);–
在這種情況下,有必要在創(chuàng)建設備描述表的函數(shù)結束之前執(zhí)行刪除語句。delete
pDC;3132MFC中的OnPaint函數(shù)-1/2MFC框架封裝的OnPaint()函數(shù)void
CView::OnPaint(){CPaintDC
dc(this);OnPrepareDC(&dc);OnDraw(&dc);}說明:CPaintDC的構造函數(shù)自動調用BeginPaint函數(shù),析構函數(shù)中自動調用EndPaint函數(shù)33MFC中的OnPaint函數(shù)-2/2第一個WM_PAINT消息大多數(shù)應用程序在WinMain中進入消息循環(huán)之前的初始化期間都會調用函數(shù)UpdateWindow。Windows利用這個機會給窗口過程發(fā)送第一個WM_PAINT消息什么情況會產(chǎn)生WM_PAINT消息?在用戶移動或顯示窗口時,窗口中先前被隱藏的區(qū)域重新可見;用戶改變的窗口的大小。程序使用ScrollWindow或ScrollDC函數(shù)滾動客戶區(qū)的一部分;程序使用InvalidateRect或InvalidateRgn等函數(shù)時,這種方法經(jīng)常被使用。其它情況:如下拉菜單或工具條提示信息等情況34GDI對象應用實例例:在View窗口中實現(xiàn)畫線的功能,以鼠標左鍵按下及抬起點做端點畫線。實現(xiàn)過程:新建MFC應用程序在View類中添加成員變量,用于保存鼠標按下點的坐標。添加響應的消息WM_LBUTTONDOWN和WM_LBUTTONUP.實現(xiàn)消息響應函數(shù)使用MoveTo和LineTo成員函數(shù)35與繪制圖形相關的幾個類先介紹幾個常用的與圖形繪制有關的數(shù)據(jù)結構類。1.CPoint類2.CSize類3.CRect類4.RGB宏圖形對象圖形對象類是MFC
封裝的Windows
繪圖工具CObjectCGdiObjectCPenCBrushCFontCBitmapCPaletteCRgn畫筆類刷子類字體類位圖類調色板類區(qū)域類3637畫筆對象MFC類CPen封裝了GDI中的畫筆對象,畫筆對象代表了進行繪制時所用的線條。默認畫筆畫出的是一個像素點寬的黑色實線。Windows用當前選入DC的畫筆繪制直線和曲線,并給用
Rectangle、Ellipse以及其它圖形生成函數(shù)畫出的圖形鑲畫邊框。38創(chuàng)建畫筆方法-1/3方法一:構造一個CPen對象并把定義畫筆所用參數(shù)都傳給該對象。CPen
pen(PS_SOLID,1,RGB(255,0,0));方法二:構造一個沒有初始化的CPen對象并調用CPen::CreatePen。CPen
pen;pen.CreatePen(PS_SOLID,1,RGB(255,0,0));39創(chuàng)建畫筆方法-2/3方法三:構造一個沒有初始化的CPen對象,向LOGPEN結構中填充描述畫筆特性的參數(shù),然后再調用
CPen:CreatePenIndirect生成畫筆。CPen
pen;LOGPEN
lp;lp.lopnStyle=PS_SOLID;lp.lopnWidth.x=1;lp.lopnColor=RGB(255,0,0);pen.CreatePenIndirect(&lp);40創(chuàng)建畫筆方法-3/3BOOL
CreatePen(
int
nPenStyle,
int
nWidth,COLORREF
crColor
);其中參數(shù)nPenStyle代表了畫筆的樣式,可以為下列值之一PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME怎樣使用創(chuàng)建好的畫筆只要把畫筆選入DC,然后調用畫線函數(shù)即可。示例如下:CPen
pen(PS_SOLID,10,RGB(255,0,0));//紅色畫筆CPen
*pOldPen=dc.SelectObject(&pen);dc.Ellipse(0,0,100,100);常用的畫圖函數(shù)-1/241常用的畫圖函數(shù)-2/24243畫筆的使用格式在OnDraw函數(shù)中
CClientDC
dc(this);CPenNewPen,*OldPen;NewPen.CreatePen(PS_DASH,1,RGB(255,0,0));OldPen=dc.SelectObject(&NewPen);使用該筆進行繪畫;–
dc.SelectObject(OldPen);刷子對象-1/3刷子對象用來在GDI輸出時填充一個封閉圖形的。在繪制時,Windows將多個這樣的位圖平鋪起來填充封閉圖形的MFC的CBrush類封裝了刷子對象CBrush(
);CBrush(COLORREF
crColor);CBrush(int
nIndex,COLORREF
crColor);CBrush(CBitmap*
pBitmap);crColor
刷子顏色nIndex
刷子圖案4445刷子對象-2/3畫刷有三種基本類型:單色畫刷:它填充的是單色帶陰影話刷:它采用預先定義好的交叉線圖案填充圖形。圖案話刷:它采用位圖來填充圖形。單色畫刷的創(chuàng)建方法方法一:將COLORREF的值傳遞給CBrush構造函數(shù)。Cbrushbrush(RGB(255,0,0));方法二:創(chuàng)建一個沒有初始化的CBrush對象,然后調用CBrush::CreateSolidBrush函數(shù)。方法三:將LOGBRUSH初始化并調用CBrush::CreateBrushIndirect46刷子對象-3/3–
HS_BDIAGONAL:由左向右下斜45度的陰影線陰影畫刷的創(chuàng)建方法:方法一:CBrush
brush(HS_DIAGCROSS,RGB(255,0,0));方法二:CBrush
brush;brush.CreateHatchBrush(HS_DIAGCROSS,RGB(255,0,0));成員函數(shù)CreateHatchBrush創(chuàng)建一個陰影刷子,其原型如下:BOOL
CreateHatchBrush(
int
nIndex,
COLORREFcrColor
)參數(shù)nIndex指定了刷子的樣式,它可以為以下常量之一:字體對象-1/2字體對象–字體對象決定的設備上下文中進行文本輸出的字符樣式。在使用字體對象的時候,
一般先創(chuàng)建一個CFont對象,然后調用CreateFont、CreateFontIndirect、CreatePointFont及CreatePointFontIndirect之一的成員函數(shù)來對該字體對象進行初始化。47字體對象-2/2Windows有六種庫存字體ANSI_FIXED_FONTANSI_VAR_FONTDEVICE_DEFAULT_FONT…示例:固定寬度變寬設備默認字體CFont
*pOldFont=
(CFont*)dc.SelectStockObject(ANSI_FIXED_FONT);char msg[
]=“
o,World”;dc.TextOut(20,50,msg,strlen(msg));……dc.SelectObject(
pOldFont
);48GDI對象應用實例畫刷的使用例:在View窗口中實現(xiàn)畫線的功能,以鼠標左鍵按下及設定的畫刷矩形。抬起點做對角點用實現(xiàn)過程:–
新建MFC應用程序在View類中添加兩個成員變量,用于保存鼠標按下點的坐標和鼠標移動點的坐標。添加響應的消息WM_LBUTTONDOWN和WM_LBUTTONUP.實現(xiàn)消息響應函數(shù)4950應用程序分析-InitInstance函數(shù)-1/3InitInstance函數(shù)用于初始化應用程序類實例,是程序做好運行前的準備工作。具體流程如下:(1)加入對ActiveX控件的支持AfxEnableControlContainer();(2)設置3D控件#ifdef
_AFXDLLEnable3dControls();
//
Call
this
when
using
MFC
in
ashared
DLL#elseEnable3dControlsStatic();
//Call
this
when
linking
to
MFCstatically#endif(3)設置初始化信息SetRegistryKey(_T("Local
AppWizard-GeneratedApplications"));51應用程序分析-InitInstance函數(shù)-2/3(4)RUNTIME_CLASS(C
oDoc),RUNTIME_CLASS(CMainFrame),
//
main
SDIframe
windowRUNTIME_CLASS(C
oView));文檔模板CSingleDocTemplate*
pDocTemplate;pDocTemplate
=
newCSingleDocTemplate(IDR_MAINFRAME,–––AddDocTemplate(pDocTemplate);分三個步驟步驟1:定義一個指向文檔模板對象的指針步驟2:調用文檔類的構造函數(shù)來初始化該對象指針。其中,第一個參數(shù)IDR_MAINFRAME是與文檔類型相匹配的資源ID;后兩個參數(shù)都是對RUNTIME_CLASS宏的調用,使得應用程序能夠動態(tài)地創(chuàng)建這三個類的實例:C
oDoc類、CMainFrame類和C
oView。–
步驟3:調用AddDocTemplate()函數(shù)來 該文檔模板(5)處理命令行–
CCommandLineInfo
cmdInfo;–mandLine(cmdInfo);–
該對象用于保存程序啟動 令行信息,根據(jù)命令行信息標志,啟、啟動不同種類的任務,如打開文檔、建立新文檔、啟動動自動化程序等,當然可將命令行修改為不啟動任何任務。(6)顯示和更新窗口,然后返回pMainFrame->ShowWindow(m_nCmdShow);pMainFrame->UpdateWindow();return
TRUE;–則應用程序對象的InitInstance
繼續(xù)執(zhí)行,即顯示和更新已經(jīng)動態(tài)創(chuàng)建的窗口,否則應用程序終止。窗口的顯示和更新操作是通過指向成功創(chuàng)建的文檔邊框窗口的指針CWinThread::m_pMainWnd
調用窗口的顯示和更新函數(shù)實現(xiàn)的,如果初始化成功,會返回TRUE,否則,程序將不能正常啟動。52應用程序分析-InitInstance函數(shù)-3/353初始化全局對象theApp:C
oAppC
oApp構造函數(shù)CWinApp構造函數(shù)AfxWinMain函數(shù){
…InitInstance(){……}銷毀窗口程序結束
:C
oDoc
C
oDoc{…}…
:C
oView
C
oView{…}…空閑程序開始①③②⑤ExitInstance⑩CWinApp::OnIdle()CWinApp::InitApplicationC
oApp::InitInstanceCWinApp::Run⑥⑨mand(…)(創(chuàng)建文檔和視圖對象)⑦⑧④MFC應用程序初始化流程…數(shù)據(jù)關系文檔類(CXXXDoc)視圖類(CXXXView)文檔管理類(CDocManager)應用程序類(CXXXApp)CPtrList
m_templa
istCPtrList
m_ViewListCDocManager
*m_pDocManagerCDocment*m_p文檔模板類(CDocTemplate)框架窗口類(CMainFrame)UINT
m_nIDResourceCRuntimeClass*
m_pDocClassC *
m_pOnlyDocCView
*m_pActiveView54文檔視圖結構創(chuàng)建過程CMainFrameCLi2_1View如果是【File/Open】【File/New】
【File/Open】構造對象構造Frame
窗口對象產(chǎn)生Frame
窗口讀文件CWinApp選擇適當?shù)?/p>
TemplateCLi2_1Doc將View
窗口初始化在View
中顯示資料產(chǎn)生View
窗口構造View
對象5556構造文檔對象構造文檔邊框窗口對象(SDI:CMainFrame,MDI:CChildFrame)創(chuàng)建視圖對象(C
oView)C
oView::Create(…)orC
oView::CreateEx(…)
③C
oView::PreCreateWindow()調用::CreateWindowEx(…)建立視圖窗口是否打開文檔?C
oDoc::OnNew
()C
oView::OnCreate()C
oDoc::DeleteContents()文檔對象可用CoView::OnInitialUpdate()CMainFrame::Create(…)
①or
CMainFrame::CreateEx(…)
②CMainFrame::PreCreateWindow()調用::CreateWindowEx(…)建立文檔邊框窗口CMainFrame::OnCreate()CMainFrame::OnCreateClient()C
oDoc::OnOpen()關閉CArchive對象和CFile對象打開文件并創(chuàng)建CFile和CArchive對象CoDoc::Serialize(CArchive&ar)MFC應用程序啟動順序-1/2為了驗證MFC
文檔視圖結構應用程序的啟動順序,
在
o
應用程序中與啟動順序有關的類成員函數(shù)中添加相應的消息框輸出語句,以便觀察應用程序的啟動順序:1:
C
oApp::C
oApp()2:
C
oApp::InitInstance()3:
CoDoc::C
oDoc()4:
CMainFrame::CMainFrame()5:
CMainFrame::PreCreateWindow(CREATESTRUCT&
cs)6:
CMainFrame::OnCrea
PCREATESTRUCT
lpCreateStruct)7:
CMainFrame::OnCreateClient(…)*8:
C
oView::C
oView()9:
C
oView::Create(…)*57MFC應用程序啟動順序-2/2oView::PreCreateWindow(CREATESTRUCT&
cs)oView::OnCrea
PCREATESTRUCT
lpCreateStruct)**oDoc::DeleteContents()*oDoc::OnNew
()*oView::OnInitialUpdate()*oApp::InitInstance()10:
C11:
C12:
C13:
C14:
C15:
C其中:*
需要新增的重載虛函數(shù)。**
需要增加的消息響應函數(shù)。編譯運行添加標記的
o應用程序,這不但可以了解應用程序的啟動順序還可以了解每個被標記函數(shù)的主要功能,這對于了解向框架的什么地方增加代碼很有幫助。58基本類對象的關系-1/5文檔類(CXXXDoc)POSITIONpos=GetViewPosition()GetNextView(pos)AfxGetMainWnd()AfxGetApp()視圖類(CXXXView)框架窗口類(CMainFrame)應用程序類(CXXXApp)GetActive()GetActiveView()GetParent()GetParentFrame()Get
()UpdateAllViews()m_pMainWnd59基本類對象的
關系-2/5注意:–關系僅限于同一進程中各類類圖中的函數(shù)均為該類的成員函數(shù),類圖外的函數(shù)為全局函數(shù)箭頭表示該函數(shù)或能返回箭頭所指類對象的指針或能對所指類進行
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教師開學前軍訓心得體會5篇
- 物流設施與設備第二章航空管道
- 債務償付質押合同(2篇)
- 公共事業(yè)投資合作協(xié)議書(2篇)
- 河南省安陽市第六十二中學2022年高三語文下學期期末試卷含解析
- 2025年Γ-球蛋白三類項目合作計劃書
- 上海寫字樓租賃合同范本
- 幼兒園房屋租賃合同書范本
- 小吃街攤位租賃合同
- 長期租賃合同范本
- 【課件】第15課 中國古代陶瓷藝術 課件高中美術魯美版美術鑒賞
- 三年級上冊數(shù)學教案 - 6.2整理與提高(解決問題-燈市) 滬教版
- 東華醫(yī)院信息平臺解決方案-藥房流程接口
- 通力電梯KCE電氣系統(tǒng)學習指南
- 風電場崗位任職資格考試題庫大全-下(填空題2-2)
- 九年級數(shù)學特長生選拔考試試題
- 幼兒園交通安全宣傳課件PPT
- 門窗施工組織設計與方案
- 健身健美(課堂PPT)
- (完整版)財務管理學課后習題答案-人大版
- 錨索試驗總結(共11頁)
評論
0/150
提交評論