第2講-MFC應用程序框架及文檔視圖架構_第1頁
第2講-MFC應用程序框架及文檔視圖架構_第2頁
第2講-MFC應用程序框架及文檔視圖架構_第3頁
第2講-MFC應用程序框架及文檔視圖架構_第4頁
第2講-MFC應用程序框架及文檔視圖架構_第5頁
已閱讀5頁,還剩33頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、編輯ppt1第第2講講 MFC程序框架及文檔視圖架構程序框架及文檔視圖架構編輯ppt2MFC 簡介簡介nWindows 編程的基本方式編程的基本方式Windows編程語言編程語言VCVBVJ都是都是“面向對象面向對象”的程序設計語言的程序設計語言核心要素核心要素窗口窗口菜單菜單控件控件對話框對話框程序模塊程序模塊主要特征:具有規范形態和操作模式主要特征:具有規范形態和操作模式編程模式編程模式傳統編寫法傳統編寫法 API交互式方法交互式方法 MFC編輯ppt3API (Application Programming Interface)n是由是由Windows操作系統提供的函數定義、操作系統提供

2、的函數定義、參數定義和消息格式的集合,用于提供給參數定義和消息格式的集合,用于提供給應用程序使用應用程序使用MFC (Microsoft Foundation Class)n微軟基礎類庫微軟基礎類庫n封裝了大量封裝了大量API函數函數n提供了圖形環境下的程序設計框架,使程序設提供了圖形環境下的程序設計框架,使程序設計過程更有效率,更符合面向對象的精神計過程更有效率,更符合面向對象的精神n簡化了簡化了Windows程序設計程序設計編輯ppt4MFC應用程序框架應用程序框架n什么是什么是MFC應用程序框架應用程序框架n提供了一般應用程序需要的全部面向對象軟件提供了一般應用程序需要的全部面向對象軟件

3、組件的集成集合組件的集成集合n好處好處n是是C+的的Windows APIn標準結構的專業化的程序,面向對象思維標準結構的專業化的程序,面向對象思維n運行速度快運行速度快n降低編碼復雜性,代碼重用,良好工具支持降低編碼復雜性,代碼重用,良好工具支持編輯ppt5理解理解MFC應用程序應用程序nWinMain在哪?程序如何開始執行?在哪?程序如何開始執行?nWindow Procedure在哪?窗口如何運行?在哪?窗口如何運行?nRegisterClass和和CreateWindow在哪?窗在哪?窗口如何創建?口如何創建?nMessage Loop ( GetMessage和和DispatchMe

4、ssage )在哪?程序如何運轉?在哪?程序如何運轉?編輯ppt6MFC程序結構程序結構n基于框架窗口的應用程序(早期的基于框架窗口的應用程序(早期的MFC)n程序運行管理、窗口及數據管理分開程序運行管理、窗口及數據管理分開n兩部分,與兩部分,與SDK程序類似程序類似n基于文檔基于文檔/視圖的應用程序視圖的應用程序n單文檔應用程序(重點)單文檔應用程序(重點)n程序運行管理、窗口管理、交互管理、數據管理分開程序運行管理、窗口管理、交互管理、數據管理分開n多文檔應用程序多文檔應用程序n基于對話框的應用程序基于對話框的應用程序n程序運行管理、對話框管理分開程序運行管理、對話框管理分開編輯ppt7M

5、FC程序的文檔程序的文檔/視圖結構視圖結構n早期早期MFC應用程序用應用程序類實現應用應用程序用應用程序類實現應用程序的初始化、消息循環、終止;用窗口程序的初始化、消息循環、終止;用窗口框架類管理窗口,包括數據管理、顯示、框架類管理窗口,包括數據管理、顯示、與用戶交互等與用戶交互等n目前的目前的MFC應用程序都采用文檔應用程序都采用文檔/視圖結構,視圖結構,把原來窗口框架類的工作分開把原來窗口框架類的工作分開n窗口框架類管理窗框窗口框架類管理窗框n視圖類(即視窗類)管理數據顯示、接收用戶視圖類(即視窗類)管理數據顯示、接收用戶輸入輸入n文檔類負責數據管理文檔類負責數據管理編輯ppt8n使用文檔

6、使用文檔/視窗結構的好處視窗結構的好處n將數據操作與數據顯示分開,可以簡化工作量將數據操作與數據顯示分開,可以簡化工作量n一組數據可以同時以不同的形式顯示在多個視一組數據可以同時以不同的形式顯示在多個視窗中窗中n窗框類、視窗類、文檔類之間的關系窗框類、視窗類、文檔類之間的關系n窗框類相當于窗戶的窗框窗框類相當于窗戶的窗框n視窗類相當于窗戶上的玻璃視窗類相當于窗戶上的玻璃n文檔類相當于房間中的物品文檔類相當于房間中的物品n在房間外邊可以透過玻璃看到室內部分物品在房間外邊可以透過玻璃看到室內部分物品n房間可以有多個窗戶,可以從不同角度透過不房間可以有多個窗戶,可以從不同角度透過不同窗戶看到室內同一

7、物品同窗戶看到室內同一物品編輯ppt9文檔視圖架構的思想文檔視圖架構的思想n數據嵌入文檔中,利用文檔的架構管理數據嵌入文檔中,利用文檔的架構管理n文檔與視圖通信,使數據在視圖中顯示文檔與視圖通信,使數據在視圖中顯示n視圖顯示數據,并與用戶交互視圖顯示數據,并與用戶交互n視圖放入窗口中視圖放入窗口中n文檔模板類對象管理上述對象協調工作文檔模板類對象管理上述對象協調工作編輯ppt10MFC程序中主要的類(基于文檔)程序中主要的類(基于文檔)nMFC把程序中的數據、函數都封裝在若干個類中把程序中的數據、函數都封裝在若干個類中n應用程序類應用程序類CWinApp及其派生類及其派生類n封裝了封裝了 Wi

8、ndows 應用程序初始化、運行、終止應用程序的代碼應用程序初始化、運行、終止應用程序的代碼n應用程序中不再出現應用程序中不再出現WinMain函數,其功能被封裝在函數,其功能被封裝在CWinApp類的成員函數中類的成員函數中n消息的響應則采用消息響應機制來實現消息的響應則采用消息響應機制來實現n窗口邊框類窗口邊框類CFrameWnd及其派生類及其派生類n管理應用程序的邊框窗口,包括窗框的大小、標題、菜單條、狀管理應用程序的邊框窗口,包括窗框的大小、標題、菜單條、狀態條等部分。(工具欄不屬于框架窗口,而是框架窗口的子窗口,態條等部分。(工具欄不屬于框架窗口,而是框架窗口的子窗口,但由框架類管理

9、)但由框架類管理)n視窗視窗CView類及其派生類類及其派生類n管理應用程序窗口中顯示數據的部分(用戶區)管理應用程序窗口中顯示數據的部分(用戶區)n負責各種數據的顯示、與用戶的交互等工作負責各種數據的顯示、與用戶的交互等工作n文檔類文檔類CDocument及其派生類及其派生類n管理應用程序中的數據,如存儲、修改等管理應用程序中的數據,如存儲、修改等編輯ppt11CWinApp-WinMain-程序啟動程序啟動n程序啟動步驟程序啟動步驟n生成生成theApp對象對象nWinMainnAfxWinMainnCMySDIApp : : InitInstancen創建窗口對象創建窗口對象n顯示并重繪

10、窗口顯示并重繪窗口n執行執行Run,并進入消息循環,并進入消息循環編輯ppt12BOOL CMySDIApp:InitInstance() AfxEnableControlContainer(); /支持支持ActiveX#ifdef _AFXDLL Enable3dControls();/Call this when using MFC in a shared DLL#else Enable3dControlsStatic();/Call this when linking to MFC statically#endif /注冊到注冊表:注冊到注冊表:HKEY_CURRENT_USERSof

11、tware / such as the name of your company or organization. SetRegistryKey(_T(Local AppWizard-Generated Applications); / Load standard INI file options (including MRU) LoadStdProfileSettings();/動態生成,返回對象指針動態生成,返回對象指針/類支持動態生成,必須有類支持動態生成,必須有/DECLARE_DYNCREATE(CMainFrame)/IMPLEMENT_DYNCREATE(CMainFrame,

12、CFrameWnd) CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME,RUNTIME_CLASS(CMySDIDoc),RUNTIME_CLASS(CMainFrame), / main SDI frame windowRUNTIME_CLASS(CMySDIView); AddDocTemplate(pDocTemplate);編輯ppt13/ Parse command line for standard shell commands, DDE, /file ope

13、nCCommandLineInfo cmdInfo;ParseCommandLine(cmdInfo);/Dispatch commands specified on the command lineif (!ProcessShellCommand(cmdInfo)return FALSE;/ The one and only window has been initialized, /so show and update it.m_pMainWnd-ShowWindow(SW_SHOW);m_pMainWnd-UpdateWindow();return TRUE;/之后調用之后調用Run,進

14、入消息循環,進入消息循環編輯ppt14CWinApp-程序運行與結束程序運行與結束n運行運行n在在CWinApp : Run中的消息循環中執行中的消息循環中執行n結束結束n直到直到CWinApp : Run 收到收到 WM_QUIT消息,結消息,結束消息循環,調用束消息循環,調用CWinApp : ExitInstance函數函數n這是一個虛函數,當在這是一個虛函數,當在CMySDIApp中改寫了中改寫了 ExitInstance函數時,則函數時,則CWinApp : Run 調用的就是調用的就是CMySDIApp : ExitInstance編輯ppt15CWinApp中可改寫的四個函數中可

15、改寫的四個函數nInitInstancenRunnExitInstancenOnIdle 空閑時間處理空閑時間處理n當消息隊列空閑時,系統自動調用此函數,通常在當消息隊列空閑時,系統自動調用此函數,通常在CMySDIApp中改寫此函數完成后臺任務。中改寫此函數完成后臺任務。n看看MSDN例子例子n右擊右擊CMySDIApp,選擇,選擇Add Virtual Function,雙擊,雙擊OnIdle,擊,擊OK。n拷貝拷貝MSDN中的代碼,運行之中的代碼,運行之nTRACE宏用于格式化輸出,只在調試狀態能用宏用于格式化輸出,只在調試狀態能用編輯ppt16CFrameWnd-WndProcn創建窗

16、口對象時調用了創建窗口對象時調用了Create函數,用于創建窗函數,用于創建窗口并與口并與CFrameWnd的對象相關聯,做初始化,的對象相關聯,做初始化,注冊等工作。注冊等工作。nOnCreate函數在窗口創建之后,顯示之前被調用。函數在窗口創建之后,顯示之前被調用。在在CMainFrame中改寫這個函數用于初始化你自中改寫這個函數用于初始化你自己的窗口特征己的窗口特征編輯ppt17窗口框架類窗口框架類CFrameWndn用于派生應用程序的窗口框架類用于派生應用程序的窗口框架類n每個窗口有一個窗口框架類每個窗口有一個窗口框架類n框架窗口的用戶區中容納視圖窗口框架窗口的用戶區中容納視圖窗口n作

17、用作用n管理窗口管理窗口n標題欄、菜單欄、工具欄、狀態欄、邊框等標題欄、菜單欄、工具欄、狀態欄、邊框等窗口窗口框架框架文檔文檔視圖視圖編輯ppt18窗口框架類中重要的成員函數窗口框架類中重要的成員函數nCreate nActivateFrame nInitialUpdateFrame nGetActiveFrame nSetActiveView nGetActiveView nCreateView nGetActiveDocument nEnableDocking nOnCreateClient nOnContextHelp n,查看MSND編輯ppt19文檔類文檔類 CDocumentnCD

18、ocument是負責管理數據的類是負責管理數據的類n應用程序中的文檔類是這個類的派生類應用程序中的文檔類是這個類的派生類n作用作用n數據管理數據管理n程序員應將用戶的實際數據對象內嵌在自己的文檔類中程序員應將用戶的實際數據對象內嵌在自己的文檔類中n需要與自己的視圖類通信需要與自己的視圖類通信n在程序中實現在程序中實現CDocument的派生類,以便嵌入數據的派生類,以便嵌入數據對象,并改寫成員函數實現對數據的處理對象,并改寫成員函數實現對數據的處理編輯ppt20文檔類中重要的成員函數文檔類中重要的成員函數nOnNewDocument (可改寫)(可改寫)nOnOpenDocument (可改寫

19、)(可改寫)nDeleteContents (可改寫)(可改寫)nSerialize(可改寫)(可改寫)nGetFirstViewPositionnGetNextViewnGetPathNamenGetTiTlenIsModifiednSetModifiedFlagnUpdateAllViewsn,查看查看MSND,不需死記硬背,在實踐中逐步熟悉,不需死記硬背,在實踐中逐步熟悉編輯ppt21視圖類視圖類 CViewn用于派生應用程序的視圖類用于派生應用程序的視圖類n作用作用n處理與用戶的交互處理與用戶的交互n顯示文檔類中的數據顯示文檔類中的數據n接收用戶輸入(例如鼠標操作)接收用戶輸入(例如鼠

20、標操作)n通常要改寫視圖類的成員函數通常要改寫視圖類的成員函數OnDraw或或OnPrint,實現數據顯示,實現數據顯示n框架自動調用框架自動調用OnDraw函數函數nWM_PAINT消息消息 OnPaint() OnDraw()編輯ppt22視圖類中重要的成員函數視圖類中重要的成員函數nGetDocument (可改寫)(可改寫)nOnDraw (可改寫)(可改寫)nOnInitialUpdate (可改寫)(可改寫)nOnUpdate (可改寫)(可改寫)nOnActivateView (可改寫)(可改寫)nOnPrepareDC (可改寫)(可改寫)n,查看查看MSND編輯ppt23視圖

21、類的派生類視圖類的派生類編輯ppt24視圖類與文檔類的關系視圖類與文檔類的關系n視圖類與文檔類為先后臺(前店后庫)視圖類與文檔類為先后臺(前店后庫)n一個文檔類對象可以對應多個視圖類一個文檔類對象可以對應多個視圖類對象對象n每個視圖類對象可以從不同角度反映文每個視圖類對象可以從不同角度反映文檔(數據)情況檔(數據)情況n一個視圖類對象只能對應一個文檔類一個視圖類對象只能對應一個文檔類對象對象編輯ppt25基于多文檔的應用程序基于多文檔的應用程序n一個應用程序類一個應用程序類n一個主框架類一個主框架類n多個窗口框架類多個窗口框架類n每個對應一個文檔類對象每個對應一個文檔類對象n對應一個或多個視圖

22、類對象對應一個或多個視圖類對象編輯ppt26用用MFC編寫編寫應用程序應用程序n使用使用MFC的的AppWizard可以按編程者的選可以按編程者的選擇,自動生成程序源代碼,它是一個框架擇,自動生成程序源代碼,它是一個框架程序,編程者可在此基礎上修改、添加程程序,編程者可在此基礎上修改、添加程序,極大地方便了程序的設計序,極大地方便了程序的設計n難點難點n生成的源代碼較復雜(對一般人不必全看懂)生成的源代碼較復雜(對一般人不必全看懂)n核心代碼被封裝起來,在生成的源代碼中沒有核心代碼被封裝起來,在生成的源代碼中沒有n涉及了大量的類成員函數,使用時要了解這些涉及了大量的類成員函數,使用時要了解這些

23、成員函數的用法,工作量較大成員函數的用法,工作量較大n要學會使用要學會使用MSDN編輯ppt272種文檔種文檔/視圖結構應用程序視圖結構應用程序n單文檔界面(單文檔界面(SDI)應用程序)應用程序n用戶在一個時刻只能操作一個文檔用戶在一個時刻只能操作一個文檔n例如例如Windows的的“記事本記事本”程序程序n有一個框架窗口(應用程序框架窗口就是文檔應用程有一個框架窗口(應用程序框架窗口就是文檔應用程序框架窗口)序框架窗口)n多文檔界面(多文檔界面(MDI)應用程序)應用程序n用戶在一個時刻可以操作多個文檔用戶在一個時刻可以操作多個文檔n例如例如Windows的的Word程序程序n有一個應用程

24、序框架窗口,每個文檔還各有一個文檔有一個應用程序框架窗口,每個文檔還各有一個文檔框架窗口框架窗口編輯ppt28類的繼承關系類的繼承關系CObject(根類)(根類)CCmdTargetCWinThreadCWndCDocumentCWinAppCViewCDialog各種控件類各種控件類CFramewnd本課程中本課程中用到的基用到的基類類編輯ppt29MFC對名稱的約定對名稱的約定n類的聲明與類的實現放在不同文件類的聲明與類的實現放在不同文件n類的聲明在類的聲明在 .h文件中文件中n類的實現代碼在類的實現代碼在 .cpp文件中文件中n類名的約定類名的約定n類名以大寫類名以大寫C開頭開頭n自動

25、生成的類的名稱中含有項目名(框架類除外)自動生成的類的名稱中含有項目名(框架類除外)n用戶定義的類名建議以用戶定義的類名建議以C開頭開頭n文件名約定文件名約定n類名去掉前面的類名去掉前面的C編輯ppt30以項目名稱以項目名稱“Hello”為例的為例的SDI程序例:程序例:n應用程序類:應用程序類:CHelloApp (基類(基類 CWinApp )n類的聲明存放在類的聲明存放在Hello.h中中n類的實現代碼在類的實現代碼在Hello.app中中n主框架類:主框架類:CMainFrame (基類(基類CFramewnd )n類的聲明存放在類的聲明存放在MainFrm.h中中n類的實現代碼在類的

26、實現代碼在MainFrm.app中中n文檔類:文檔類:CHelloDoc (基類(基類CDocument)n類的聲明存放在類的聲明存放在HelloDoc.h中中n類的實現代碼在類的實現代碼在HelloDoc.app中中n視窗類:視窗類:CHelloView (基類(基類 CView )n類的聲明存放在類的聲明存放在HelloView.h中中n類的實現代碼在類的實現代碼在HelloView.app中中編輯ppt31匈牙利表示法(命名規則)匈牙利表示法(命名規則)n函數命名規則函數命名規則n函數名函數名 = 動詞動詞 + 名詞名詞n動詞和名詞的第一個字母大寫動詞和名詞的第一個字母大寫n例例 Get

27、Messagen變量命名規則變量命名規則n小寫字母前綴表示變量的類型小寫字母前綴表示變量的類型,其余的部分描述其余的部分描述變量的功能變量的功能n例例 nCount編輯ppt32AppWizard、ClassWizard的使用的使用案例案例3.2n要求要求n當鼠標在窗口中移動時,當鼠標在窗口中移動時,在窗口顯示鼠標的位置坐在窗口顯示鼠標的位置坐標標n當按下鼠標左鍵時,在窗當按下鼠標左鍵時,在窗口顯示鼠標單擊點的坐標口顯示鼠標單擊點的坐標n放開鼠標左鍵時,在窗口放開鼠標左鍵時,在窗口顯示顯示“鼠標左鍵被釋放鼠標左鍵被釋放”n按可顯示字符鍵時,從窗按可顯示字符鍵時,從窗口的左上角開始顯示輸入口的左

28、上角開始顯示輸入的字符的字符編輯ppt33分析分析n鼠標在窗口用戶區操作,是視窗類管理的范圍鼠標在窗口用戶區操作,是視窗類管理的范圍n為捕捉鼠標移動位置,要響應鼠標的為捕捉鼠標移動位置,要響應鼠標的WM_MOUSEMOVE消息消息n為捕捉鼠標單擊點的坐標,要響應鼠標的為捕捉鼠標單擊點的坐標,要響應鼠標的WM_LBUTTONDOWN、 WM_LBUTTONUP消消息息n為了解敲擊了哪些字符鍵,要響應為了解敲擊了哪些字符鍵,要響應WM_CHAR消消息息n為顯示信息,除要用到輸出字符串的函數外,還為顯示信息,除要用到輸出字符串的函數外,還要考慮在什么地方使用輸出字符串函數要考慮在什么地方使用輸出字符

29、串函數n問題問題n上述這些消息應該是哪個對象的?上述這些消息應該是哪個對象的?編輯ppt34程序要點程序要點n為視窗類添加成員變量,并在構造函數中把為視窗類添加成員變量,并在構造函數中把m_nLine初始化為初始化為0CString m_MousePoint; /用于顯示不同的字符串用于顯示不同的字符串CString m_strDisplay;/ 接收鍵盤輸入的字符接收鍵盤輸入的字符int m_nLine;/ 對鍵盤輸入的文本行計數對鍵盤輸入的文本行計數n利用利用ClassWizard映射鼠標左鍵按下、放開、鼠映射鼠標左鍵按下、放開、鼠標移動、標移動、WM_CHAR消息消息n輸出字符串用輸出字

30、符串用 CDC:TextOut 函數函數n需要有一個需要有一個 CDC 對象或它派生的對象對象或它派生的對象n因多處需要輸出,可把輸出代碼放到視窗類的因多處需要輸出,可把輸出代碼放到視窗類的OnDraw函數中,此函數在窗口重畫時被調用,函數中,此函數在窗口重畫時被調用,輸出代碼放在這里可以保證總被顯示,例如窗口輸出代碼放在這里可以保證總被顯示,例如窗口尺寸變化時尺寸變化時編輯ppt35void CMyHelloView:OnLButtonDown(UINT nFlags, CPoint point) m_MousePoint.Format(鼠標左鍵在(鼠標左鍵在(%d,%d)處按下)處按下,p

31、oint.x,point.y);Invalidate( );/ 引起視窗重畫引起視窗重畫CView:OnLButtonDown(nFlags, point);void CMyHelloView:OnLButtonUp(UINT nFlags, CPoint point) m_MousePoint=鼠標左鍵被釋放鼠標左鍵被釋放;Invalidate( );CView:OnLButtonUp(nFlags, point);void CMyHelloView:OnMouseMove(UINT nFlags, CPoint point) m_MousePoint.Format(鼠標指針位于(鼠標指針位于(%d,%d)處)處,point.x,point.y);Invali

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論