




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
主要內容2.1用MFC向導生成應用程序2.2應用程序框架分析2.3文檔與視圖2.4工具欄和狀態欄2.5-2.7MFC新功能2.8應用程序框架類對象分析主要內容2.1用MFC向導生成應用程序12.1用MFC向導生成應用程序用AppWizard應用程序向導生成MFC應用程序。單文檔應用程序多文檔應用程序對話框應用程序用ClassWizard工具生成派生類、定義處理消息、管理對話框、定制MFC成員函數。2.1用MFC向導生成應用程序用AppWizard應用程序22.1用MFC向導生成應用程序演示MFC向導生成常用的三種應用程序。2.1用MFC向導生成應用程序演示MFC向導生成常用的三種32.1.2生成的應用程序類型基于對話框的應用程序CWinApp、CDialog類2.1.2生成的應用程序類型基于對話框的應用程序42.1.2生成的應用程序類型單文檔應用程序CWinApp、CFrameWnd、CView、CDocument2.1.2生成的應用程序類型單文檔應用程序52.1.2生成的應用程序類型多文檔應用程序CWinApp、CMDIFrameWnd、CMDIChildWnd、CView、CDocument2.1.2生成的應用程序類型多文檔應用程序62.1.3向導生成工程文件簡介頭文件與實現文件各個類的*.h和*.cppResource.h:定義工程中所有資源標識符,給資源ID分配一個整數值。StdAfx.h和StdAfx.cpp:用于建立一個預編譯的頭文件。資源文件*.rc和*.rc2:是程序所使用的所有Windows資源的列表。*.ico:應用程序的圖標所使用的圖標文件。*Doc.ico:應用程序的文檔圖標文件。文檔圖標一般顯示在多文檔程序界面上。Toolbar.bmp:工具欄按鈕的位圖文件。2.1.3向導生成工程文件簡介頭文件與實現文件72.1.3向導生成工程文件簡介解決方案文件和工程文件*.sln:保存當前解決方案所包含的工程的信息。*.vcxproj:包含當前工程的設置、工程中的文件等信息。2.1.3向導生成工程文件簡介解決方案文件和工程文件8MFC應用程序框架結構類的繼承關系:2.2應用程序框架分析MFC應用程序框架結構類的繼承關系:2.2應用程序框架分92.2.1框架簡介1.CObject類CObject是MFC類庫的根類,它幾乎描述了所有MFC類的一些公共特性,并且給所有由它派生出的類提供了3種重要特性,即:串行化支持、運行時類信息支持以及診斷和調試支持。2.CCmdTarget類命令類CCmdTarget是CObject的子類,它是MFC庫中所有具有消息映射屬性的類的公共基類。從CCmdTarget派生的類能在程序運行時動態創建對象和處理命令消息。
2.2.1框架簡介1.CObject類103.CWinApp類CObjectCCmdTargetCWinThreadCWinApp應用程序類在類族中的位置WinMain函數的函數體的封裝支持線程管理2.2.1框架簡介
應用程序類CWinApp是CWinThread的子類,封裝了初始化、運行、終止應用程序的代碼。可以由此派生自己的應用類。3.CWinApp類CObjectCCmdTargetCW11指向框架窗口的指針m_pMainWnd2.2.1框架簡介指向框架窗口的指針m_pMainWnd2.2.1框架簡介12CWinApp類中定義了三個可以重寫的虛函數:InitInstance()--程序創建和顯示窗口。程序設計時,必須以CWinApp類為基類派生自己的應用程序類,并根據情況重寫InitInstance()。Run(),處理消息循環。ExitInstance()程序結束時做收尾工作。2.2.1框架簡介CWinApp類中定義了三個可以重寫的虛函數:2.2.1134.文檔模板類CDocTemplateCObjectCCmdTargetCDocTemplateCSingleDocTemplateCMultiDocTemplate單一的文檔指針2.2.1框架簡介4.文檔模板類CDocTemplateCObjectCCm14文檔類鏈表查閱CPtrList類2.2.1框架簡介文檔類鏈表查閱CPtrList類2.2.1框架簡介15RUNTIME_CLASS分別創建了doc、view和窗口框架類的對象2.2.1框架簡介RUNTIME_CLASS分別創建了doc、view和窗口框165.CFrameWnd類
CFrameWnd類是CWnd類的派生類。它是所有其他框架窗口類的基類,主要用來管理一個窗口。
CFrameWnd類的對象是一個框架窗口,包括邊框、標題欄、菜單、最大化按鈕、最小化按鈕和一個激活的視圖。CFrameWnd類支持單文檔界面,對于多文檔界面,使用它的兩個派生類CMDIFrameWnd和CMDIChildWnd。CMDIFrameWnd類用于MDI的主窗口,CMDIChildWnd類用于MDI的子窗口。2.2.1框架簡介5.CFrameWnd類2.2.1框架簡介176.CView類視圖類CView是CWnd類的子類。視圖類及其派生類用于管理框架窗口的客戶區。
7.CDocument類文檔類CDocument負責裝載和維護文檔。文檔包括應用程序的工作成果或環境設置數據等,可以是程序需要保存的任何內容。2.2.1框架簡介6.CView類2.2.1框架簡介18為應用程序框架提供客戶區,承擔用戶數據的顯示(同時替代窗口框架接收外界的輸入。因此,該類是程序員編碼最多的地方。派生關系與文檔類的聯系紐帶用戶區的繪制,注意:誰來觸發1)自動重繪;2)手動視圖更新2.2.1框架簡介為應用程序框架提供客戶區,承擔用戶數據的顯示(同時替代窗口框19應用程序的文檔類由CDocument派生Serialize()函數:文件操作時響應
ReaddatafromfileWritedatatofile序列化/串行化Serialization2.2.1框架簡介應用程序的文檔類由CDocument派生Serialize(20各對象之間的關系2.2.1框架簡介各對象之間的關系2.2.1框架簡介21CWinApptheApp;theApp.InitInstance系統應用程序對象文檔模板文檔對象窗口框架對象視圖對象1.應用程序各對象的創建順序2.2.2MFC應用程序運行流程CWinApptheApp;theApp.InitInst222.2.2MFC應用程序運行流程2.應用程序的執行過程啟動:創建應用程序對象theApp、調用應用程序類的構造函數初始化對象theApp。應用程序框架調用MFC提供的AfxWinMain()主函數。AfxWinMain()主函數,首先通過調用全局函數AfxGetApp()來獲取theApp的指針pApp;然后通過該指針調用theApp的成員函數InitInstance()來初始化應用程序。2.2.2MFC應用程序運行流程2.應用程序的執行過程23
在應用程序的初始化過程InitInstance中,同時還構造了文檔模板,產生最初的文檔、視圖和主框架窗口,并生成工具欄和狀態欄。2.2.2MFC應用程序運行流程當InitInstance()函數執行完畢后,AfxWinMain()函數將調用成員函數
Run(),進入消息處理循環;函數Run()收到WM_QUIT消息。MFC首先調用CWinApp類的成員函數ExitInstance();然后調用靜態對象的析構函數;退出應用程序,將控制權交給操作系統。在應用程序的初始化過程InitInstance中,同24WinMain->AfxWinMain應用程序初始化消息循環C:\ProgramFiles\MicrosoftVisualStudio10.0\vc\atlmfc\src\winmain.cpp2.2.2MFC應用程序運行流程WinMain->AfxWinMain應用程序初始化消息252.2.3應用程序窗口重疊窗口彈出窗口子窗口2.2.3應用程序窗口重疊窗口26
Windows消息主要有3種類型:標準Windows消息、控件消息和命令消息。1).標準Windows消息除WM_COMMAND以外,所有以“WM_”為前綴的消息都是標準Windows消息;由窗口類或視圖類處理;都有默認的處理函數,它們在CWnd類中進行了預定義。1.消息的類別及其描述2.2.4消息機制與消息循環Windows消息主要有3種類型:標準Windows消27標準的Windows消息又分為3類:鍵盤消息、鼠標消息和窗口消息。(1)鍵盤消息鍵盤消息與鍵盤某個鍵的動作相關聯。常見的鍵盤消息有以下幾種。WM_KEYDOWN、WM_KEYUP:按下、釋放鍵產生的消息。WM_CHAR:輸入字符時產生的消息。2.2.4消息機制與消息循環標準的Windows消息又分為3類:2.2.4消息機制與消28(2)鼠標消息鼠標消息涉及到鼠標的單擊、雙擊、拖動等。常用的鼠標消息有以下幾種。
WM_MOUSEMOVE:鼠標移動時產生的消息。
WM_RBUTTONDOWN:鼠標右鍵按下時產生的消息。
WM_LBUTTONDOWN:鼠標左鍵按下時產生的消息。
WM_LBUTTONDBLCLICK:鼠標雙擊時產生的消息。2.2.4消息機制與消息循環(2)鼠標消息2.2.4消息機制與消息循環29(3)窗口消息窗口消息一般與創建窗口、繪制窗口、移動窗口和銷毀窗口等動作有關。在MFC應用程序中,窗口消息是由視圖類、窗口類及它們的派生類處理的。2.2.4消息機制與消息循環(3)窗口消息2.2.4消息機制與消息循環302).控件消息控件消息是指控件或其他子窗口向父窗口發送的消息。與其他標準的Windows消息一樣,控件消息也應該在視圖類、窗口類中進行處理。但是,如果用戶單擊按鈕控件時,發出的控件通知消息BN_CLICKED將作為命令消息來處理。2.2.4消息機制與消息循環2).控件消息2.2.4消息機制與消息循環313).命令消息命令消息是由菜單項、工具欄按鈕、快捷鍵等用戶界面對象發出的WM_COMMAND消息。命令消息與其他消息不同,它可被更廣泛的對象如文檔、文檔模板、應用程序對象、窗口和視圖等處理。3).命令消息322.MFC消息映射機制MFC采用消息映射來處理消息;消息映射機制包括一組消息映射宏,用于把一個Windows消息和其消息處理函數聯系起來。所有從CCmdTarget類派生出來的類都能夠擁有自己的消息映射。與MFC消息映射機制有關的宏有以下3個:DECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP(MyClass,MybaseClass)END_MESSAGE_MAP()2.2.4消息機制與消息循環2.MFC消息映射機制MFC采用消息映射來處理消息;33為了使用消息映射宏:首先在類定義的結尾用DECLARE_MESSAGE_MAP()宏來聲明使用消息映射,該宏表示在為各個處理函數所寫的類聲明之后存在消息映射條目,這些函數是該類的成員函數。然后在類的實現源文件中用BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()宏來定義消息映射。MFC應用程序MESSAG_MAP消息映射的形式如下:2.2.4消息機制與消息循環為了使用消息映射宏:2.2.4消息機制與消息循環34BEGIN_MESSAGE_MAP(MyClass,MybaseClass)//{{AFX_MSG_MAP(MyClass)//ClassWizard維護消息映射宏的標記
ON_... //MFC預定義消息映射宏
ON_MESSAGE(message,memberFun)//用戶自定義消息映射宏
//}}AFX_MSG_MAPEND_MESSAGE_MAP()其中,MyClass是擁有消息映射的派生類名,MybaseClass是其基類名。2.2.4消息機制與消息循環BEGIN_MESSAGE_MAP(MyClass,Myb352.2.4消息機制與消息循環2.2.4消息機制與消息循環363自定義消息處理自定義消息處理:定義消息名、分配ID值及完成消息映射。Windows將所有的消息值分為4段:0x0000~0x03FF段:用于Windows系統消息0x0400~0x7FFF段:用于用戶自定義的窗口消息0x8000~0xBFFF段:為Windows保留值0xC000~0xFFFF段:用于應用程序的字符串消息。2.2.4消息機制與消息循環3自定義消息處理自定義消息處理:定義消息名、分配ID值37
常量WM_USER(為0x0400)與第一個自定義消息值相對應,用戶必須為自己的消息定義相對于WM_USER的偏移值,利用#define語句直接定義自己的消息,如下所示:
#defineWM_HIDEWM_USER+3//自定義消息WM_USER
也可以調用窗口消息注冊函數RegisterWindowMessage()來定義一個Windows消息,由系統分配消息一個整數值。該函數原型為:
UINTRegisterWindowMessage(LPCTSTRlpString);
其中參數lpString是要定義的消息名,調用成功后將返回該消息的ID值。2.2.4消息機制與消息循環常量WM_USER(為0x0400)與第382.2.4消息機制與消息循環自定義消息方法的步驟:1、:定義消息
#defineWM_HIDEWM_USER+101
2、在類頭文件的AFX_MSG塊中聲明消息處理函數:
classCMainFrame:publicCFrameWnd{
protected:
//{{AFX_MSG(CMainFrame)
afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);
afx_msgvoidOnTimer(UINTnIDEvent);
afx_msgLRESULTOnHide(WPARAMwParam,LPARAMlParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
2.2.4消息機制與消息循環自定義消息方法的步驟:392.2.4消息機制與消息循環3、在類的實現文件中,使用ON_MESSAGE宏指令將消息映射到消息處理表中。
BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_HIDE,OnProgress)//注意這條語句的后面沒有分號
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
2.2.4消息機制與消息循環3、在類的實現文件中,使用ON402.2.4消息機制與消息循環4、實現消息處理函數。該函數使用WPRAM和LPARAM參數并返回LRESULT。
LRESULTCMainFrame::OnHide(WPARAMwParam,LPARAMlParam){
MessageBox(_T("我的消息"));return0;
}
2.2.4消息機制與消息循環4、實現消息處理函數。該函數使412.2.4消息機制與消息循環5、在適當的時候發送自定義消息,進行消息處理。需要注意使用SendMessage還是PostMessage進行處理:SendMessage是消息處理完畢后再返回;而PostMessage則是把消息放到消息隊列后立即返回。
SendMessage(theApp.GetMainWnd()->GetSafeHwnd(),WM_PROGRESS,0L,0L);如果用戶需要整個系統唯一的消息,可以調用SDK函數RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步驟同上。2.2.4消息機制與消息循環5、在適當的時候發送自定義消息422.2.4消息機制與消息循環SendMessage函數原型LRESULTSendMessage(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam)hWnd:其窗口程序將接收消息的窗口的句柄。Msg:指定被發送的消息號。wParam:指定附加的消息特定信息。lParam:指定附加的消息特定信息。返回值:返回值指定消息處理的結果,依賴于所發送的消息。2.2.4消息機制與消息循環SendMessage函數原432.2.4消息機制與消息循環演示并編寫一個自定義消息應用程序,添加WM_PROGRESS消息。當程序運行時,則調用自定義消息處理函數,輸出文本“自定義消息處理函數被調用!”。2.2.4消息機制與消息循環演示并編寫一個自定義消息應用程44消息傳遞標準Windows消息傳遞直線上溯命令消息傳遞迂回上溯消息傳遞標準Windows消息傳遞45第2章MFC應用程序課件46消息傳遞對于WM_COMMAND消息。框架窗口實際上是大多數WM_COMMAND消息的接受者,但WM_COMMAND消息還可以在視圖、文檔,甚至應用程序類中被處理。消息傳遞對于WM_COMMAND消息。框架窗口實際上是大多數47
文檔/視圖體系結構是MFC應用程序框架結構的基石,它定義了一種程序結構,這種結構利用文檔對象保存應用程序的數據,依靠視圖對象控制視圖顯示數據,文檔與視圖的關系是一對多的關系,也就是說,文檔中的數據可以以不同的方式顯示。2.3文檔與視圖文檔/視圖體系結構是MFC應用程序框架結構的基石,它482.3文檔與視圖文檔負責數據讀取、存取以及其它的操作。CDocument類本身只是一個空殼,我們需要從它派生一個數據自已的類,并在類中聲明我們需要的變量,用以承載數據。CDocument類已經為我們做好了一些重要的函數,其中包括與View類的”溝通”函數、文檔存取等函數。2.3文檔與視圖文檔負責數據讀取、存取以及其它的操作。49表主要的CDocument操作2.3文檔與視圖表主要的CDocument操作2.3文檔與視圖50表主要的CDocument可覆蓋函數2.3文檔與視圖表主要的CDocument可覆蓋函數2.3文檔與視圖51
用戶可通過函數GetFirstViewPosition()和GetNextView()得到和文檔關聯的視圖的指針,代碼如下:POSITIONpos=GetFirstViewPosition();//得到視圖列表頭的位置While(pos!=NULL){CView*pView=GetNextView(pos); //獲得視圖列表中的視圖指針
…}
2.3文檔與視圖用戶可通過函數GetFirstViewPos522.3文檔與視圖視圖類有兩個用途:提供文檔的可視化表示將用戶輸入(特別是鼠標和鍵盤消息)轉換為操作文檔數據的命令。MFC還包含了一組CView類的派生類,用來完成不同功能的視圖。2.3文檔與視圖視圖類有兩個用途:53CEditView:簡單的文本編輯器,類似NotepadCListView:基于列表的視圖,類似文件夾瀏覽CTreeView:基于樹狀控件的視圖,類似文件瀏覽左側的樹狀結構CRichEditView:支持多種字體、OLE和RTF格式的高級編輯器CScrollView:支持滾動條的視圖CFormView:窗體視圖,支持在上邊使用對話框控件CRecordView:連接到ODBC數據庫的視圖CDaoRecordView:連接到DAO數據庫的視圖CView的子類2.3文檔與視圖CEditView:簡單的文本編輯器,類似NotepadCV542.3文檔與視圖一個文檔可以具有與其聯系的多個視圖,而一個視圖只能屬于一個文檔。CView類保存了m_pDocument數據成員,并將該指針提供給視圖的GetDocument成員函數使用,用以標識出視圖類所屬的文檔。AppWizard為視圖類生成源代碼時,它覆蓋了基類的GetDocument函數。其強制轉換了m_pDocument為派生類指針。2.3文檔與視圖一個文檔可以具有與其聯系的多個視圖,而一個552.3文檔與視圖表主要的CView可覆蓋函數2.3文檔與視圖表主要的CView可覆蓋函數562.3文檔與視圖
OnInitialUpdate與OnUpdate在SDI中,視圖與文檔一樣,只構造一次,重復使用。在SDI中,每當文檔被打開或創建時,都要調用視圖的OnInitialUpdate()OnInitialUpdate()默認要調用OnUpdate()OnUpdate()的默認操作是使視圖客戶區無效并執行重繪。在CView類的派生類中,如果重寫了OnInitialUpdate(),需要要調用CView::OnInitialUpdate(),否則新文檔被打開或創建時不會被更新。2.3文檔與視圖OnInitialUpdate與OnUp572.3文檔與視圖CView::OnDraw何時調用:在WM_PAINT到來時(當視窗顯示區域的一部分顯示內容或者全部變為「無效」,以致于必須「更新畫面」時,將由這個訊息通知程式。)在文檔被打印時什么是CDCDC:DeviceContext,設備描述表。在WM_PAINT到來時,DC指向屏幕設備在文檔被打印時,DC指向打印機設備2.3文檔與視圖CView::OnDraw何時調用:582.3文檔與視圖OnPaint()與OnDrawWM_PAINT到來時會調用OnPaint()函數,此函數在CView中被定義。WM_PRINT到來時會調用OnPrint()函數,此函數在CView中被定義。兩個函數都調用了OnDraw(),并傳送不同的DC,分別代表屏幕設備與打印設備。2.3文檔與視圖OnPaint()與OnDraw592.4工具欄與狀態欄2.4工具欄與狀態欄602.4工具欄與狀態欄工具欄簡介工具欄對象是一種窗口,工具欄中的所有按鈕的圖形被存儲在一個位圖中,而該位圖被定義在應用程序的資源文件中。工具欄按鈕與菜單選項是類似的。單擊工具欄按鈕將產生相應的命令,應用程序通過提供消息處理函數來處理產生的命令。如果工具欄的某個按鈕沒有COMMAND或UPDATE_COMMAND_UI處理函數,那么框架自動使該按鈕無效。工具欄和狀態欄一般作為框架窗口類的成員變量聲明,在創建框架窗口時自動創建它們,在銷毀框架窗口時自動銷毀所創建的控件欄對象。使用AppWizard創建應用程序基本框架時,可以得到初始的工具欄和狀態欄。2.4工具欄與狀態欄工具欄簡介612.4.1工具欄系統默認生成的工具欄資源為IDR_MAINFRAME,可以在此基礎上設計自己的工具欄,刪除或添加一些按鈕。需要為工具欄按鈕提供ID號,一般取某個菜單項的ID。2.4.1工具欄系統默認生成的工具欄資源為IDR_MAIN622.4.1工具欄工具欄的創建:(1)創建工具欄資源(2)構造CToolBar對象,即在邊框窗口類的聲明中添加類似以下的聲明:CToolBarm_wndToolBar;(3)調用Create或CreateEx創建工具欄,然后調用LoadToolBar裝載工具欄資源。2.4.1工具欄工具欄的創建:63工具欄的創建intCMainFrame::OnCreate( LPCREATESTRUCTlpCreateStruct){ …… if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_TOP |CBRS_GRIPPER|CBRS_TOOLTIPS |CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||
!m_wndToolBar.LoadToolBar( IDR_MAINFRAME)) { TRACE0("Failedtocreatetoolbar\n"); return-1;//failtocreate }CToolBarm_wndToolBar;工具欄的創建intCMainFrame::OnCreate64工具欄的停靠intCMainFrame::OnCreate( LPCREATESTRUCTlpCreateStruct){ ……
m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar);}工具欄的停靠intCMainFrame::OnCreate65調用Create時還可以指定工具欄的風格,默認風格是WS_CHILD|WS_VISIBLE|CBRS_TOP。①CBRS_TOP工具欄在邊框窗口頂部②CBRS_BOTTOM工具欄在邊框窗口底部③CBRS_NOALIGN邊框窗口改變大小時,工具欄不重定位④CBRS_TOOLTIPS使工具提示有效。⑤CBRS_SIZE_DYNAMIC工具欄尺寸可變。⑥CBRS_SIZE_FIXED工具欄尺寸固定。⑦CBRS_FLOATLNG工具欄是浮動的。⑧CBRS_FLYBY在狀態欄中顯示按鈕的有關信息。⑨CBRS_HIDE_INPLANE不顯示工具欄。工具欄的創建調用Create時還可以指定工具欄的風格,默認風格是WS_C66停靠方式CToolBar的EnableDocking:設置工具欄能停靠在何處?CBRS_ALIGN_ANYCBRS_ALIGN_TOP、CBRS_ALIGN_LEFTCBRS_ALIGN_RIGHT、CBRS_ALIGN_BOTTOMCMainFrame類的EnableDocking:設置能讓工具欄停靠在何處?調用DockControlBar,完成工具欄停靠,具體效果由上面的兩個EnableDocking共同決定。停靠方式CToolBar的EnableDocking:設置工672.4.1工具欄演示在系統提供的工具欄上添加并編輯新的工具欄按鈕,產生消息響應。2.4.1工具欄演示在系統提供的工具欄上添加并編輯新的工具682.4.1工具欄創建新工具欄資源定義工具欄對象MainFrm.h中protected:
CStatusBarm_wndStatusBar;
CToolBarm_wndToolBar;
CToolBarm_wndTool1;系統的工具欄第二個工具欄2.4.1工具欄創建新工具欄資源系統的工具欄第二個工具欄69多工具欄實現-創建intCMainFrame::OnCreate(……){ ……
if(!m_wndToolBar.CreateEx(……)|| !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failedtocreatetoolbar\n"); return-1; } if(!m_wndTool1.CreateEx(……)|| !m_wndTool1.LoadToolBar(IDR_TOOL)) { TRACE0("Failedtocreatetoolbar\n"); return-1;//failtocreate }……多工具欄實現-創建intCMainFrame::OnCre70多工具欄實現-停靠intCMainFrame::OnCreate(……){ ……
m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY);
m_wndTool1.EnableDocking( CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar); DockControlBar(&m_wndTool1); return0;}只需調用一次多工具欄實現-停靠intCMainFrame::OnCre71隱藏和顯示工具欄ShowControlBar(&m_wndTool1,
true,false);ShowControlBar(&m_wndToolBar, false,false);true顯示false隱藏是否立即顯示,false立即顯示隱藏和顯示工具欄ShowControlBar(&m_wndT722.4.2狀態欄狀態欄可以顯示與上下文有關的工具欄按鈕和菜單項的幫助信息。在Windows中已經變的非常普遍。2.4.2狀態欄狀態欄可以顯示與上下文有關的工具欄按鈕和732.4.2狀態欄
狀態欄的定義用AppWizard創建的SDI或MDI應用程序框架中,有一個靜態的indicator數組,它是在MainFrm.cpp文件中定義的,被MFC用作狀態欄的定義。StaticUINTindicators[]={ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,}indicators數組的定義2.4.2狀態欄狀態欄的定義StaticUINT742.4.2狀態欄提示符從左到右水平排列在狀態欄中,往數組中添加更多的標識符就可以在狀態欄增加更多的提示符,可以根據需要動態改變提示符的大小,通過增加ID_SEPARATOR元素還可增加分隔符。最左邊的提示符(位置0)通常用作消息區,可以在其中顯示命令提示之類的文本字符串。創建狀態欄創建狀態欄的步驟:(1)構造CStatusBar對象。(2)調用Create創建狀態欄并將其與CStatusBar對象聯結。(3)調用成員函數SetIndicators,設置指示符的標識符為數組中相應元素指定的值,裝載每個標識符指定的字符串資源并將字符串設為提示符文本。2.4.2狀態欄提示符從左到右水平排列在狀態欄中,往數組75狀態欄的創建intCMainFrame::OnCreate( LPCREATESTRUCTlpCreateStruct){ …… if(!m_wndStatusBar.Create(this)|| !m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT))) { TRACE0("Failedtocreatestatusbar\n"); return-1;//failtocreate }CStatusBarm_wndStatusBar;狀態欄的創建intCMainFrame::OnCreate763、自定義狀態欄窗格每個窗格指定一個ID號,同時還要創建一個相同ID號的字符串資源。窗格的初始大小等于關聯字符串的長度。3、自定義狀態欄窗格每個窗格指定一個ID號,同時還要創建一個77顯示鼠標位置-----插入窗格staticUINTindicators[]={ ID_SEPARATOR,
IDS_MOUSEXY, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL,};插入窗格的ID顯示鼠標位置-----插入窗格staticUINTind78顯示鼠標位置-----輸出內容映射WM_MOUSEMOVE到視圖類 CStringstr;
CMainFrame*pFrame=(CMainFrame*) AfxGetApp()->m_pMainWnd;
CMFCStatusBar*pStatus= &pFrame->m_wndStatusBar;
if(pStatus) { str.Format("X=%d,Y=%d", point.x,point.y);
pStatus->SetPaneText(1,str);
}
將該成員修改為public修飾顯示鼠標位置-----輸出內容映射WM_MOUSEMOVE到79CStatusBar::Create()函數用于創建一個Windows狀態欄(子窗口),并將其連接到CStatusBar對象上,同時設置初始字體和狀態欄的高度。該函數原型為:
BOOLCreate(CWnd*pParentWnd,DWORDdwStyle=WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,UINTnID=AFX_IDW_STATUS_BAR);其中參數pParentWnd為指向父窗口CWnd對象的指針;dwStyle指定狀態欄的風格,除了標準的Windows風格外,還可以是CBRS_TOP(狀態欄位于框架窗口的頂部)、CBRS_BOTTOM(狀態欄位于框架窗口的底部)、CBRS_NOALIGN(當父窗口改變時,狀態欄不被重新定位);參數nID表示該狀態欄的子窗口ID。如果函數調用成功,則返回一個非0值,否則返回0。CStatusBar常用成員CStatusBar::Create()函數CStatus80SetIndIcators()函數函數SetIndIcators()用于設置指示器的ID,并裝入由每個ID指定的字符串資源,然后將指示器的文字設置為該字符串,該函數的原型為:BOOLSetIndIcators(constUINT*lpIDArray,intnIDCount);參數lpIDArray為指向ID數組的指針,nIDCount為lpIDArray所指向的數組元素的個數。該函數按照數組lpIDArray中的對應元素的值設定標識符ID的值,加載由每個ID所指定的字符串資源,并把字符串設置為標識符的文字。如果該函數操作成功,在返回一個非0值,否則返回0。CStatusBar常用成員SetIndIcators()函數CStatusBar常用成81SetPaneInfo()函數函數SetPaneInfo()用于設置給定索引值的指示器ID、風格和寬度。它的原型為:voidSetPaneInfo(intnIndex,UINTnID,UINTnStyle,intcxWidth);該函數給標識符欄設置一個新的ID、風格和寬度。可供選擇的標識符風格有:
CStatusBar常用成員SetPaneInfo()函數CStatusBar常用成員82SetPaneText()函數函數SetPaneText()用于設置給定索引值的指示器的文本。它的原型為:BOOLSetPaneText(intnIndex,LPCTSTRlpszNewText,BOOLbUpdate=TRUE);該函數用lpszNewText所指向的字符串來設置狀態欄的文字。CStatusBar常用成員SetPaneText()函數CStatusBar常用成員832.5-2.7MFC新功能邊演示邊講解2.5-2.7MFC新功能邊演示邊講解84當前位置 被訪問的位置 訪問方法文檔 視圖 GetFirstViewPosition GetNextView文檔 模板 GetDocTemplate視圖 文檔 GetDocument視圖 框架 GetParentFrame框架 視圖 GetActiveView框架 文檔 GetActiveDocumentMDI主框架 MDI子框架 MDIGetActiveMDI子框架 MDI主框架 GetParentFrame任何位置 應用程序 AfxGetApp任何位置 主框架 AfxGetMainWndDoc/View結構的五個基本成員經常需要互相訪問,假設某個視圖想要獲得文檔,或某個框架需要獲得活動視圖,可以通過此表提供的方法進行解決
2.8應用程序框架類對象分析當前位置 被訪問的位置 訪問方法Doc/View結構的五個基85第2章MFC應用程序課件86謝謝!87謝謝!878888主要內容2.1用MFC向導生成應用程序2.2應用程序框架分析2.3文檔與視圖2.4工具欄和狀態欄2.5-2.7MFC新功能2.8應用程序框架類對象分析主要內容2.1用MFC向導生成應用程序892.1用MFC向導生成應用程序用AppWizard應用程序向導生成MFC應用程序。單文檔應用程序多文檔應用程序對話框應用程序用ClassWizard工具生成派生類、定義處理消息、管理對話框、定制MFC成員函數。2.1用MFC向導生成應用程序用AppWizard應用程序902.1用MFC向導生成應用程序演示MFC向導生成常用的三種應用程序。2.1用MFC向導生成應用程序演示MFC向導生成常用的三種912.1.2生成的應用程序類型基于對話框的應用程序CWinApp、CDialog類2.1.2生成的應用程序類型基于對話框的應用程序922.1.2生成的應用程序類型單文檔應用程序CWinApp、CFrameWnd、CView、CDocument2.1.2生成的應用程序類型單文檔應用程序932.1.2生成的應用程序類型多文檔應用程序CWinApp、CMDIFrameWnd、CMDIChildWnd、CView、CDocument2.1.2生成的應用程序類型多文檔應用程序942.1.3向導生成工程文件簡介頭文件與實現文件各個類的*.h和*.cppResource.h:定義工程中所有資源標識符,給資源ID分配一個整數值。StdAfx.h和StdAfx.cpp:用于建立一個預編譯的頭文件。資源文件*.rc和*.rc2:是程序所使用的所有Windows資源的列表。*.ico:應用程序的圖標所使用的圖標文件。*Doc.ico:應用程序的文檔圖標文件。文檔圖標一般顯示在多文檔程序界面上。Toolbar.bmp:工具欄按鈕的位圖文件。2.1.3向導生成工程文件簡介頭文件與實現文件952.1.3向導生成工程文件簡介解決方案文件和工程文件*.sln:保存當前解決方案所包含的工程的信息。*.vcxproj:包含當前工程的設置、工程中的文件等信息。2.1.3向導生成工程文件簡介解決方案文件和工程文件96MFC應用程序框架結構類的繼承關系:2.2應用程序框架分析MFC應用程序框架結構類的繼承關系:2.2應用程序框架分972.2.1框架簡介1.CObject類CObject是MFC類庫的根類,它幾乎描述了所有MFC類的一些公共特性,并且給所有由它派生出的類提供了3種重要特性,即:串行化支持、運行時類信息支持以及診斷和調試支持。2.CCmdTarget類命令類CCmdTarget是CObject的子類,它是MFC庫中所有具有消息映射屬性的類的公共基類。從CCmdTarget派生的類能在程序運行時動態創建對象和處理命令消息。
2.2.1框架簡介1.CObject類983.CWinApp類CObjectCCmdTargetCWinThreadCWinApp應用程序類在類族中的位置WinMain函數的函數體的封裝支持線程管理2.2.1框架簡介
應用程序類CWinApp是CWinThread的子類,封裝了初始化、運行、終止應用程序的代碼。可以由此派生自己的應用類。3.CWinApp類CObjectCCmdTargetCW99指向框架窗口的指針m_pMainWnd2.2.1框架簡介指向框架窗口的指針m_pMainWnd2.2.1框架簡介100CWinApp類中定義了三個可以重寫的虛函數:InitInstance()--程序創建和顯示窗口。程序設計時,必須以CWinApp類為基類派生自己的應用程序類,并根據情況重寫InitInstance()。Run(),處理消息循環。ExitInstance()程序結束時做收尾工作。2.2.1框架簡介CWinApp類中定義了三個可以重寫的虛函數:2.2.11014.文檔模板類CDocTemplateCObjectCCmdTargetCDocTemplateCSingleDocTemplateCMultiDocTemplate單一的文檔指針2.2.1框架簡介4.文檔模板類CDocTemplateCObjectCCm102文檔類鏈表查閱CPtrList類2.2.1框架簡介文檔類鏈表查閱CPtrList類2.2.1框架簡介103RUNTIME_CLASS分別創建了doc、view和窗口框架類的對象2.2.1框架簡介RUNTIME_CLASS分別創建了doc、view和窗口框1045.CFrameWnd類
CFrameWnd類是CWnd類的派生類。它是所有其他框架窗口類的基類,主要用來管理一個窗口。
CFrameWnd類的對象是一個框架窗口,包括邊框、標題欄、菜單、最大化按鈕、最小化按鈕和一個激活的視圖。CFrameWnd類支持單文檔界面,對于多文檔界面,使用它的兩個派生類CMDIFrameWnd和CMDIChildWnd。CMDIFrameWnd類用于MDI的主窗口,CMDIChildWnd類用于MDI的子窗口。2.2.1框架簡介5.CFrameWnd類2.2.1框架簡介1056.CView類視圖類CView是CWnd類的子類。視圖類及其派生類用于管理框架窗口的客戶區。
7.CDocument類文檔類CDocument負責裝載和維護文檔。文檔包括應用程序的工作成果或環境設置數據等,可以是程序需要保存的任何內容。2.2.1框架簡介6.CView類2.2.1框架簡介106為應用程序框架提供客戶區,承擔用戶數據的顯示(同時替代窗口框架接收外界的輸入。因此,該類是程序員編碼最多的地方。派生關系與文檔類的聯系紐帶用戶區的繪制,注意:誰來觸發1)自動重繪;2)手動視圖更新2.2.1框架簡介為應用程序框架提供客戶區,承擔用戶數據的顯示(同時替代窗口框107應用程序的文檔類由CDocument派生Serialize()函數:文件操作時響應
ReaddatafromfileWritedatatofile序列化/串行化Serialization2.2.1框架簡介應用程序的文檔類由CDocument派生Serialize(108各對象之間的關系2.2.1框架簡介各對象之間的關系2.2.1框架簡介109CWinApptheApp;theApp.InitInstance系統應用程序對象文檔模板文檔對象窗口框架對象視圖對象1.應用程序各對象的創建順序2.2.2MFC應用程序運行流程CWinApptheApp;theApp.InitInst1102.2.2MFC應用程序運行流程2.應用程序的執行過程啟動:創建應用程序對象theApp、調用應用程序類的構造函數初始化對象theApp。應用程序框架調用MFC提供的AfxWinMain()主函數。AfxWinMain()主函數,首先通過調用全局函數AfxGetApp()來獲取theApp的指針pApp;然后通過該指針調用theApp的成員函數InitInstance()來初始化應用程序。2.2.2MFC應用程序運行流程2.應用程序的執行過程111
在應用程序的初始化過程InitInstance中,同時還構造了文檔模板,產生最初的文檔、視圖和主框架窗口,并生成工具欄和狀態欄。2.2.2MFC應用程序運行流程當InitInstance()函數執行完畢后,AfxWinMain()函數將調用成員函數
Run(),進入消息處理循環;函數Run()收到WM_QUIT消息。MFC首先調用CWinApp類的成員函數ExitInstance();然后調用靜態對象的析構函數;退出應用程序,將控制權交給操作系統。在應用程序的初始化過程InitInstance中,同112WinMain->AfxWinMain應用程序初始化消息循環C:\ProgramFiles\MicrosoftVisualStudio10.0\vc\atlmfc\src\winmain.cpp2.2.2MFC應用程序運行流程WinMain->AfxWinMain應用程序初始化消息1132.2.3應用程序窗口重疊窗口彈出窗口子窗口2.2.3應用程序窗口重疊窗口114
Windows消息主要有3種類型:標準Windows消息、控件消息和命令消息。1).標準Windows消息除WM_COMMAND以外,所有以“WM_”為前綴的消息都是標準Windows消息;由窗口類或視圖類處理;都有默認的處理函數,它們在CWnd類中進行了預定義。1.消息的類別及其描述2.2.4消息機制與消息循環Windows消息主要有3種類型:標準Windows消115標準的Windows消息又分為3類:鍵盤消息、鼠標消息和窗口消息。(1)鍵盤消息鍵盤消息與鍵盤某個鍵的動作相關聯。常見的鍵盤消息有以下幾種。WM_KEYDOWN、WM_KEYUP:按下、釋放鍵產生的消息。WM_CHAR:輸入字符時產生的消息。2.2.4消息機制與消息循環標準的Windows消息又分為3類:2.2.4消息機制與消116(2)鼠標消息鼠標消息涉及到鼠標的單擊、雙擊、拖動等。常用的鼠標消息有以下幾種。
WM_MOUSEMOVE:鼠標移動時產生的消息。
WM_RBUTTONDOWN:鼠標右鍵按下時產生的消息。
WM_LBUTTONDOWN:鼠標左鍵按下時產生的消息。
WM_LBUTTONDBLCLICK:鼠標雙擊時產生的消息。2.2.4消息機制與消息循環(2)鼠標消息2.2.4消息機制與消息循環117(3)窗口消息窗口消息一般與創建窗口、繪制窗口、移動窗口和銷毀窗口等動作有關。在MFC應用程序中,窗口消息是由視圖類、窗口類及它們的派生類處理的。2.2.4消息機制與消息循環(3)窗口消息2.2.4消息機制與消息循環1182).控件消息控件消息是指控件或其他子窗口向父窗口發送的消息。與其他標準的Windows消息一樣,控件消息也應該在視圖類、窗口類中進行處理。但是,如果用戶單擊按鈕控件時,發出的控件通知消息BN_CLICKED將作為命令消息來處理。2.2.4消息機制與消息循環2).控件消息2.2.4消息機制與消息循環1193).命令消息命令消息是由菜單項、工具欄按鈕、快捷鍵等用戶界面對象發出的WM_COMMAND消息。命令消息與其他消息不同,它可被更廣泛的對象如文檔、文檔模板、應用程序對象、窗口和視圖等處理。3).命令消息1202.MFC消息映射機制MFC采用消息映射來處理消息;消息映射機制包括一組消息映射宏,用于把一個Windows消息和其消息處理函數聯系起來。所有從CCmdTarget類派生出來的類都能夠擁有自己的消息映射。與MFC消息映射機制有關的宏有以下3個:DECLARE_MESSAGE_MAP()BEGIN_MESSAGE_MAP(MyClass,MybaseClass)END_MESSAGE_MAP()2.2.4消息機制與消息循環2.MFC消息映射機制MFC采用消息映射來處理消息;121為了使用消息映射宏:首先在類定義的結尾用DECLARE_MESSAGE_MAP()宏來聲明使用消息映射,該宏表示在為各個處理函數所寫的類聲明之后存在消息映射條目,這些函數是該類的成員函數。然后在類的實現源文件中用BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()宏來定義消息映射。MFC應用程序MESSAG_MAP消息映射的形式如下:2.2.4消息機制與消息循環為了使用消息映射宏:2.2.4消息機制與消息循環122BEGIN_MESSAGE_MAP(MyClass,MybaseClass)//{{AFX_MSG_MAP(MyClass)//ClassWizard維護消息映射宏的標記
ON_... //MFC預定義消息映射宏
ON_MESSAGE(message,memberFun)//用戶自定義消息映射宏
//}}AFX_MSG_MAPEND_MESSAGE_MAP()其中,MyClass是擁有消息映射的派生類名,MybaseClass是其基類名。2.2.4消息機制與消息循環BEGIN_MESSAGE_MAP(MyClass,Myb1232.2.4消息機制與消息循環2.2.4消息機制與消息循環1243自定義消息處理自定義消息處理:定義消息名、分配ID值及完成消息映射。Windows將所有的消息值分為4段:0x0000~0x03FF段:用于Windows系統消息0x0400~0x7FFF段:用于用戶自定義的窗口消息0x8000~0xBFFF段:為Windows保留值0xC000~0xFFFF段:用于應用程序的字符串消息。2.2.4消息機制與消息循環3自定義消息處理自定義消息處理:定義消息名、分配ID值125
常量WM_USER(為0x0400)與第一個自定義消息值相對應,用戶必須為自己的消息定義相對于WM_USER的偏移值,利用#define語句直接定義自己的消息,如下所示:
#defineWM_HIDEWM_USER+3//自定義消息WM_USER
也可以調用窗口消息注冊函數RegisterWindowMessage()來定義一個Windows消息,由系統分配消息一個整數值。該函數原型為:
UINTRegisterWindowMessage(LPCTSTRlpString);
其中參數lpString是要定義的消息名,調用成功后將返回該消息的ID值。2.2.4消息機制與消息循環常量WM_USER(為0x0400)與第1262.2.4消息機制與消息循環自定義消息方法的步驟:1、:定義消息
#defineWM_HIDEWM_USER+101
2、在類頭文件的AFX_MSG塊中聲明消息處理函數:
classCMainFrame:publicCFrameWnd{
protected:
//{{AFX_MSG(CMainFrame)
afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);
afx_msgvoidOnTimer(UINTnIDEvent);
afx_msgLRESULTOnHide(WPARAMwParam,LPARAMlParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
2.2.4消息機制與消息循環自定義消息方法的步驟:1272.2.4消息機制與消息循環3、在類的實現文件中,使用ON_MESSAGE宏指令將消息映射到消息處理表中。
BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_TIMER()
ON_MESSAGE(WM_HIDE,OnProgress)//注意這條語句的后面沒有分號
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
2.2.4消息機制與消息循環3、在類的實現文件中,使用ON1282.2.4消息機制與消息循環4、實現消息處理函數。該函數使用WPRAM和LPARAM參數并返回LRESULT。
LRESULTCMainFrame::OnHide(WPARAMwParam,LPARAMlParam){
MessageBox(_T("我的消息"));return0;
}
2.2.4消息機制與消息循環4、實現消息處理函數。該函數使1292.2.4消息機制與消息循環5、在適當的時候發送自定義消息,進行消息處理。需要注意使用SendMessage還是PostMessage進行處理:SendMessage是消息處理完畢后再返回;而PostMessage則是把消息放到消息隊列后立即返回。
SendMessage(theApp.GetMainWnd()->GetSafeHwnd(),WM_PROGRESS,0L,0L);如果用戶需要整個系統唯一的消息,可以調用SDK函數RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步驟同上。2.2.4消息機制與消息循環5、在適當的時候發送自定義消息1302.2.4消息機制與消息循環SendMessage函數原型LRESULTSendMessage(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam)hWnd:其窗口程序將接收消息的窗口的句柄。Msg:指定被發送的消息號。wParam:指定附加的消息特定信息。lParam:指定附加的消息特定信息。返回值:返回值指定消息處理的結果,依賴于所發送的消息。2.2.4消息機制與消息循環SendMessage函數原1312.2.4消息機制與消息循環演示并編寫一個自定義消息應用程序,添加WM_PROGRESS消息。當程序運行時,則調用自定義消息處理函數,輸出文本“自定義消息處理函數被調用!”。2.2.4消息機制與消息循環演示并編寫一個自定義消息應用程132消息傳遞標準Windows消息傳遞直線上溯命令消息傳遞迂回上溯消息傳遞標準Windows消息傳遞133第2章MFC應用程序課件134消息傳遞對于WM_COMMAND消息。框架窗口實際上是大多數WM_COMMAND消息的接受者,但WM_COMMAND消息還可以在視圖、文檔,甚至應用程序類中被處理。消息傳遞對于WM_COMMAND消息。框架窗口實際上是大多數135
文檔/視圖體系結構是MFC應用程序框架結構的基石,它定義了一種程序結構,這種結構利用文檔對象保存應用程序的數據,依靠視圖對象控制視圖顯示數據,文檔與視圖的關系是一對多的關系,也就是說,文檔中的數據可以以不同的方式顯示。2.3文檔與視圖文檔/視圖體系結構是MFC應用程序框架結構的基石,它1362.3文檔與視圖文檔負責數據讀取、存取以及其它的操作。CDocument類本身只是一個空殼,我們需要從它派生一個數據自已的類,并在類中聲明我們需要的變量,用以承載數據。CDocument類已經為我們做好了一些重要的函數,其中包括與View類的”溝通”函數、文檔存取等函數。2.3文檔與視圖文檔負責數據讀取、存取以及其它的操作。137表主要的CDocument操作2.3文檔與視圖表主要的CDocument操作2.3文檔與視圖138表主要的CDocument可覆蓋函數2.3文檔與視圖表主要的CDocument可覆蓋函數2.3文檔與視圖139
用戶可通過函數GetFirstViewPosition()和GetNextView()得到和文檔關聯的視圖的指針,代碼如下:POSITIONpos=GetFirstViewPosition();//得到視圖列表頭的位置While(pos!=NULL){CView*pView=GetNextView(pos); //獲得視圖列表中的視圖指針
…}
2.3文檔與視圖用戶可通過函數GetFirstViewPos1402.3文檔與視圖視圖類有兩個用途:提供文檔的可視化表示將用戶輸入(特別是鼠標和鍵盤消息)轉換為操作文檔數據的命令。MFC還包含了一組CView類的派生類,用來完成不同功能的視圖。2.3文檔與視圖視圖類有兩個用途:141CEditView:簡單的文本編輯器,類似NotepadCListView:基于列表的視圖,類似文件夾瀏覽CTreeView:基于樹狀控件的視圖,類似文件瀏覽左側的樹狀結構CRichEditView:支持多種字體、OLE和RTF格式的高級編輯器CScrollView:支持滾動條的視圖CFormView:窗體視圖,支持在上邊使用對話框控件CRecordView:連接到ODBC數據庫的視圖CDaoRecordView:連接到DAO數據庫的視圖CView的子類2.3文檔與視圖CEditView:簡單的文本編輯器,類似NotepadCV1422.3文檔與視圖一個文檔可以具有與其聯系的多個視圖,而一個視圖只能屬于一個文檔。CView類保存了m_pDocument數據成員,并將該指針提供給視圖的GetDocument成員函數使用,用以標識出視圖類所屬的文檔。AppWizard為視圖類生成源代碼時,它覆蓋了基類的GetDocument函數。其強制轉換了m_pDocument為派生類指針。2.3文檔與視圖一個文檔可以具有與其聯系的多個視圖,而一個1432.3文檔與視圖表主要的CView可覆蓋函數2.3文檔與視圖表主要的CView可覆蓋函數1442.3文檔與視圖
OnInitialUpdate與OnUpdate在SDI中,視圖與文檔一樣,只構造一次,重復使用。在SDI中,每當文檔被打開或創建時,都要調用視圖的OnInitialUpdate()OnInitialUpdate()默認要調用OnUpdate()OnUpdate()的默認操作是使視圖客戶區無效并執行重繪。在CView類的派生類中,如果重寫了OnInitialUpdate(),需要要調用CView::OnInitialUpdate(),否則新文檔被打開或創建時不會被更新。2.3文檔與視圖OnInitialUpdate與OnUp1452.3文檔與視圖CView::OnDraw何時調用:在WM_PAINT到來時(當視窗顯示區域的一部分顯示內容或者全部變為「無效」,以致于必須「更新畫面」時,將由這個訊息通知程式。)在文檔被打印時什么是CDCDC:DeviceContext,設備描述表。在WM_PAINT到來時,DC指向屏幕設備在文檔被打印時,DC指向打印機設備2.3文檔與視圖CView::OnDraw何時調用:1462.3文檔與視圖OnPaint()與OnDrawWM_PAINT到來時會調用OnPaint()函數,此函數在CView中被定義。WM_PRINT到來時會調用OnPrint()函數,此函數在CView中被定義。兩個函數都調用了OnDraw(),并傳送不同的DC,分別代表屏幕設備與打印設備。2.3文檔與視圖OnPaint()與OnDraw1472.4工具欄與狀態欄2.4工具欄與狀態欄1482.4工具欄與狀態欄工具欄簡介工具欄對象是一種窗口,工具欄中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年新員工入職安全培訓考試試題及參考答案AB卷
- 25年公司、項目部、各個班組三級安全培訓考試試題附答案(研優卷)
- 25年公司安全管理人員安全培訓考試試題【原創題】
- 知到智慧樹網課:地球科學概論(東華理工大學)章節測試滿分答案
- 2025租賃合同模板合同樣本
- 2025混凝土澆筑工程施工合同模板
- 2025汽車銷售貸款合同范本
- 2025年數控精密電火花成形機床項目合作計劃書
- 2025年的簡約合同范本
- 2025年共享充電寶合作協議書
- 北京市東城區2024-2025學年度第二學期高三綜合練習(一)(東城高三一模)【歷史試卷+答案】
- 2025-2030中國制造運營管理(MOM)軟件行業市場現狀供需分析及投資評估規劃分析研究報告
- 少尿與無尿的急診處理
- 血管導管相關血流感染預防控制措施
- 非計劃拔管的預防及處理
- 蘇教版一年級下冊數學全冊教學設計(配2025年春新版教材)
- 2025八年級下冊贛美版美術全冊教案(附教學計劃及進度表)
- 生物制藥質量標準研究-深度研究
- 2024年云南師范大學實驗中學招聘考試真題
- 鑄造行業安全培訓課件
- 2025年電力人工智能多模態大模型創新技術及應用報告-西安交通大學
評論
0/150
提交評論