欧美精品一二区,性欧美一级,国产免费一区成人漫画,草久久久久,欧美性猛交ⅹxxx乱大交免费,欧美精品另类,香蕉视频免费播放

《c語言學習》PPT課件.ppt

上傳人:za****8 文檔編號:14488693 上傳時間:2020-07-21 格式:PPT 頁數(shù):166 大小:1.17MB
收藏 版權(quán)申訴 舉報 下載
《c語言學習》PPT課件.ppt_第1頁
第1頁 / 共166頁
《c語言學習》PPT課件.ppt_第2頁
第2頁 / 共166頁
《c語言學習》PPT課件.ppt_第3頁
第3頁 / 共166頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《c語言學習》PPT課件.ppt》由會員分享,可在線閱讀,更多相關《《c語言學習》PPT課件.ppt(166頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、作業(yè)提交地址:yg_,1,2,第一章 Visual C++集成開發(fā)環(huán)境簡介,,3,項目的創(chuàng)建與編譯、鏈接過程,4,Visual C++ IDE功能組成,編輯: AutoComplete、IntelliSense 編譯: 預編譯頭文件(stdafx.h),可以加快編譯速度 鏈接: 增量式鏈接、ProjectSettingsLinkLink Incrementally 調(diào)試:Edit ,16,顯示一個字符串,繪制設備上下文 BeginPaint() EndPaint(),17,添加資源,菜單 對話框,18,SDK程序向MFC程序轉(zhuǎn)變,第一步:WinMain改造為CWinApp 第二步:窗口函數(shù)改造

2、為消息映射,19,Win32 API應用程序的修改,InitApplication InitInstance 消息映射結(jié)構(gòu)體,20,為什么使用MFC,是微軟提供的Windows編程接口 使應用程序的結(jié)構(gòu)標準化 使應用程序小而且快(DLL) Visual C++降低編碼復雜程度 MFC庫具有豐富的特性,21,第三章 用AppWizard創(chuàng)建的第一個MFC程序,目的:如何編制一個具有一定功能的MFC類庫應用程序(引入簡單的視圖/文檔概念) 什么是視圖 用戶角度:與其他Windows窗口一樣的窗口 程序員:從MFC的Cview類派生的類的一個對象 單文檔界面和多文檔界面 單文檔:一次只能打開一個文檔

3、(NotePad) 多文檔:一次能打開多個文檔(Word),22,應用程序的主要元素 WinMain函數(shù) CMyApp類----theApp CMyApp::InitInstance(); CMyApp::Run() ;//CMyApp::OnIdle() CMyFrame類 CMyFrame::OnLButtonDown、CMyFrame::OnPaint()、CMyFrame::OnDraw() 關閉主畫面窗口后關閉應用程序。,23,MFC庫消息映射,MFC庫對Windows消息映射不采用虛擬函數(shù),而通過宏把特定的消息映射到派生類成員函數(shù)。主要是為避免大量的vtable開支。 菜單命令消息

4、和按扭消息的處理與Windows消息一樣。 一個MFC消息處理程序需要一個函數(shù)原型、一個函數(shù)體和一個在消息映射中的項。,24,MFC庫消息映射,afx_msg void OnLButtonDown(UINT nFlags,Cpoint point) CMyFrame::OnLButtonDown(UINT nFlags,CPoint point) BEGIN_MESSAGE_MAP(CMyFrame,CFrameWnd) ON_WM_LBUTTONDOWN() END_MESSAGE_MAP(),25,文檔和視圖,文檔----代表數(shù)據(jù)模型,基類是CDocument 視圖----代表用戶接口,基

5、類是Cview,26,第一個MFC程序,什么是視圖 用戶角度:與其他Windows窗口一樣的窗口 程序員:從MFC的Cview類派生類的一個對象 單文檔界面和多文檔界面 單文檔:一次只能打開一個文檔(NotePad) 多文檔:一次能打開多個文檔(Word) 在窗口中繪圖 通過響應OnDraw()函數(shù)來完成繪圖 設備上下文 圖形設備對象,27,,資源編輯器 ex03a.rc包含 afxres.h(只讀符號) afxres.rc(通用組件) resource.h(自定義符號) Debug與Release目標 啟用診斷宏(C:WINNTafx.ini TraceEnabled=1) Tools/MF

6、C Tracer/enable tracing 予編譯頭文件(stdafx.cpp stdafx.h),28,在視圖窗口中繪圖,通過修改OnDraw()函數(shù)來完成繪圖 是CView類的虛擬成員函數(shù),每次視圖重畫時調(diào)用(WM_PAINTOnPaintOnDraw) 如果程序的數(shù)據(jù)被改變,則可以調(diào)用視圖的Invalidate()成員函數(shù),并最終調(diào)用OnDraw() InvalidateWM_PAINTOnDraw() 對視圖窗口的重畫不要過于頻繁 畫圖過程中涉及的MFC類 設備上下文 其他圖形設備對象,29,設備上下文,Windows系統(tǒng)不允許直接操作顯示硬件,而是通過一個抽象層設備上下文來進行通

7、訊 MFC編程中,設備上下文是CDC及其派生類的對象 添入代碼:,30,資源,資源編輯器 ex03a.rc包含 加速器、對話框、圖標、菜單、字符串、工具條、版本信息 afxres.h(只讀符號),通用的MFC庫資源 afxres.rc(通用組件),通用的MFC庫資源 resource.h(自定義符號),31,Debug與Release目標,分兩個版本:發(fā)行版和調(diào)試版 區(qū)別:源碼調(diào)試、診斷宏、鏈接庫、編譯優(yōu)化等方面不同 啟用診斷宏(C:WINNTafx.ini TraceEnabled=1) Tools/MFC Tracer/enable tracing 予編譯頭文件(stdafx.cpp st

8、dafx.h) /Yc(stdafx.cpp)、/Yu(復用)、/Fp(pch文件路徑)編譯開關,32,第四章 基本事件處理、映射模式,MFC類庫中有很多On-函數(shù)由框架調(diào)用,完成對事件的響應。 他們不是虛擬函數(shù),必須通過消息映射結(jié)構(gòu),使應用框架和我們的代碼關聯(lián) 消息映射 當用戶在視圖中按下鼠標,Windows發(fā)送WM_LBUTTONDOWN消息給視圖窗口,視圖窗口必須有一個OnLButtonDown(UINT nFlags,CPoint point)成員函數(shù)來響應該消息,頭文件中加入消息處理函數(shù)原型afx_msg void OnLButtonDown(UINT nFlags,CPoint p

9、oint),通過消息映射宏將框架和函數(shù)關聯(lián),將消息和消息的響應函數(shù)連接的過程稱為消息映射。,33,消息映射的步驟:,定義函數(shù):void CMyView::OnLButtonDown(UINT nFlags,CPoint point) 函數(shù)原型:afx_msg void OnLButtonDown(UINT nFlags,CPoint point) 消息映射宏 BEGIN_MESSAGE_MAP() ON_WM_LBUTTONDOWN END_MESSAGE_MAP() 頭文件中添加: DECLARE_MESSAGE_MAP(),34,保存視圖的狀態(tài),通過一些狀態(tài)的變化反映事件,在引入文檔類之前

10、,存放在視圖的數(shù)據(jù)成員中 CRect m_rectEllipse;UINT m_nColor 數(shù)據(jù)成員初始化:放在視圖的構(gòu)造函數(shù)中 CEx04aView::CEx04aView():m_rectEllipse(0,0,200,200),m_nColor(GRAY_BRUSH),35,如何反映事件,鼠標點擊不會引起重畫,需要調(diào)用: CWnd::InvalidateRect(LPRECT rect); 視圖的客戶區(qū): CRect,CSize,Cpoint及其相互運算 如何判斷點在矩形內(nèi)部 CRect rect; if(rect.PtInRect(point)... 如何判斷點在區(qū)域內(nèi)部 CRgn

11、rgn; rgn.CreateEllipticRgnIndirect(m_rectEllipse); if(rgn.PtInRegion(point)... 實例,36,映射方式,為使顯示與顯示分辨率無關,應使用不同于以像素為單位的坐標系統(tǒng) 設備坐標----以像素表示的坐標值。 邏輯坐標----當前映射方式下的坐標值。 映射方式----邏輯坐標和設備坐標之間的比例關系。 Windows映射方式,映射方式邏輯單位 MM_LOENGLISH 0.01 inch MM_HIENGLISH 0.001 inch MM_LOMETRIC 0.1 mm MM_HIMETRIC 0.01 mm MM_TWI

12、PS 1/1440 inch MM_TEXT1pixel,37,MM_TEXT映射方式,邏輯坐標和設備坐標1:1 坐標X向右增加,坐標Y向下增加 通過調(diào)用CDC的SetWindowOrg,SetViewportOrg改變原點 CMyView::OnDraw(CDC* pDC) pDC-SetMapMode(MM_TEXT); pDC-SetWindowOrg(CPoint(100,100)); //將邏輯坐標(100,100)設置為窗口原點 ,38,自定義映射方式一:固定縮放的映射方式,向右X增加,向下Y減少,39,自定義映射方式二: 縮放可變的映射方式,可以改變縮放因子和原點 MM_ISOT

13、ROPIC和MM_ANISOTROPIC MM_ISOTROPIC縱橫比始終是1;1 MM_ANISOTROPIC可以分別改變X和Y縮放因子,40,坐標轉(zhuǎn)換,一些重要的規(guī)則: CDC的成員函數(shù)使用邏輯坐標 CWnd的成員函數(shù)使用設備坐標 在設備坐標系中進行擊鍵測試如(CRect::PtInRect) 用邏輯坐標存儲長期的值。 CDC的函數(shù)LPtoDP和DPtoLP負責兩個系統(tǒng)之間的轉(zhuǎn)換。 在CView::OnPrepareDC()中完成映射方式設定。 編程示例,41,滾動窗口,當窗口比屏幕大時,可能需要滾動視口。 通過從CScrollView中派生視圖類可以實現(xiàn)。 在OnInitialUpda

14、te()中定義邏輯大小和映射方式。 見舉例,42,第五章 圖形設備接口,所有與繪制有關的操作都要用到GDI元素 設備上下文是最重要的GDI元素,代表某個具體的物理設備,43,設備上下文類,基類是CDC,每個設備上下文對象有一個Windows設備上下文,由32位HDC句柄標識 CDC類的虛擬性是應用框架的一個重要特性。 顯示器上下文類:CClientDC、CWindowDC等,44,構(gòu)造和銷毀,構(gòu)造設備上下文對象后,應及時銷毀,Windows限制可獲取設備上下文的數(shù)量。 構(gòu)造的兩種方法,45,設備上下文的狀態(tài),使用CDC對象繪圖時,屏幕上的內(nèi)容依賴于設備上下文的當前狀態(tài): 繪圖需要的相關對象:筆

15、、刷子、字體 映射方式 其他方面(文本對齊方式、填充方式等),46,CPaintDC類,重寫了OnPaint函數(shù)后,需要用到CPaintDC類 OnPaint用正確設置的CPaintDC調(diào)用OnDraw();,47,圖形設備接口對象,CBitmap CBrush CFont CPalatte CPen CRgn,48,如何構(gòu)造和銷毀,一步構(gòu)造 CPen newPen(PS_DASHDOTDOT, 2, (COLORREF) 0); 先定義對象,再創(chuàng)建 CFont font; font.CreateFont(30, 10, 0, 0, 400, FALSE, FALSE, 0, ANSI_CHA

16、RSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_MODERN, Courier New); // TrueType 如何斷開其與設備上下文的關系 先選出設備上下文,然后析構(gòu) 庫存GDI對象自動析構(gòu),49,Windows顏色映射,Windows圖形設備接口提供獨立于硬件的顏色接口 程序中的絕對顏色代碼由圖形設備接口映射到視頻卡的某種或某幾種顏色的組合。 VGA模式下提供16種標準純色 256色視頻卡提供20種標準純色 16位顏色視頻卡,可以顯示32768中顏色。 24位真彩色。,

17、50,字體,字體是GDI對象 字體的選擇 與設備無關的True Type字體和與設備有關的字體(Windows系統(tǒng)顯示字體和LaserJet LinePrinter字體) MFC提供選擇準確的打印機字體和大小,然后盡力使顯示最好。 打印字體 以磅來度量 顯示字體 顯示字體和打印字體一般不能嚴格匹配,除非使用MM_TEXT方式。,51,計算字符高度,,52,計算字符高度,字體高度=tmHeight-tmInternalHeight(點數(shù)) 行高=tmHeight+tmExternalLeading 對應TEXTMETRIC和GetTextMetrics(,53,舉例1,,54,舉例2,,55,舉

18、例3,,56,第六章 模態(tài)對話框和Windows公用控件,模態(tài)和非模態(tài)對話框 模態(tài):在對話框關閉之前,不能轉(zhuǎn)到其他窗口工作 非模態(tài):可以轉(zhuǎn)到其他窗口,但對話框在最頂端,57,對話框與其他窗口類的不同,對話框是基于資源的,資源指定其包含的元素和布局。 對話框包含的窗口元素:控件 一個從CDialog類派生的MFC類完成和對話框界面的聯(lián)系,58,模態(tài)對話框編程,編程步驟 使用對話框編輯器創(chuàng)建對話框資源 ClassWizard生成派生對話框類 ClassWizard添加數(shù)據(jù)成員 ClassWizard消息映射 特殊控件初始化 在視圖中編寫代碼,激活對話框?qū)ο?舉例1,59,對話框的運行過程,Cdia

19、log::DoModal(),OnInitDialog,CDialog::OnInitDialog,CWnd::UpdateData(FALSE),DoDatExchange,Cdialog::OnOK,UpdateData(TRUE),60,增強對話框程序,控制OnOK的退出 OnCancel 處理 掛接滾動條控件 改進的ex06a,61,識別控件,CWnd指針和控件ID GetDlgItem返回CWnd指針 GetDlgCtrlID返回ID 設置對話框背景和控件的顏色(WM_CTLCOLOR------OnCtlColor) 在對話框窗口內(nèi)部畫圖 運行時增加控件,62,Windows公用控

20、件,在Windows95中引入,NT也提供 包含在comctl32.dll動態(tài)連接庫中 窗口過程函數(shù)及窗口類注冊代碼包含在該庫中 DLL加載時注冊窗口類 對公用控件,ClassWizard不能提供數(shù)據(jù)成員支持,但提供通知消息的映射 應在OnInitDialog和OnOK中分別初始化和讀取控件數(shù)據(jù),63,幾種Windows公用控件,進度指示器控件,對應C++類是CProgressCtrl,可以調(diào)用其成員函數(shù)SetRange和SetPos進行初始化或更新操作 Slider(跟蹤欄控件),對應的C++類是CSliderCtrl,不需要映射WM_HSCROLL和WM_VSCROLL即可滾動。,64,幾

21、種Windows公用控件,Spin(微調(diào)控件),對應的C++類是CSpinButtonCtrl,經(jīng)常和一個編輯控件一起使用,稱“伙伴”,編輯控件的Tab順序僅在Spin之前。SetRange()和SetAccel()及AutoBuddy和Set Buddy Integer屬性,65,幾種Windows公用控件,列表控件,對應的C++類是CListCtrl,需要一個圖片文件夾,CImageList類的對象 樹型控件,對應的C++類是 CTreeCtrl,用HTREEITEM而不是整型索引,插入時使用TV_INSERTSTRUCT結(jié)構(gòu),66,控件通知消息結(jié)構(gòu),早期的Windows控件利用WM_CO

22、MMAND發(fā)送通知消息 對于Windows公用控件來說,標準的32位wParam和lParam參數(shù)是不夠的,67,控件通知消息結(jié)構(gòu),微軟提供WM_NOTIFY消息解決這一問題,其結(jié)構(gòu)如下: 舉例2,68,第七章 非模態(tài)對話框,本章介紹非模態(tài)對話框和Windows公用對話框 非模態(tài)對話框:在對話框活動的同時允許在其他地方工作。 公用對話框包括:文件、頁面設置、顏色選擇等,包含在comdlg32.dll中,69,非模態(tài)對話框,MFC中類CDialog為基類。 創(chuàng)建: (1)調(diào)用CDialog的缺省構(gòu)造函數(shù)構(gòu)造對象 (2)調(diào)用CDialog::Create(IDD)創(chuàng)建 可以通過向視圖發(fā)送用戶定義的

23、消息處理按鈕消息。 (1)SendMessage() (2)PostMessage(),70,舉例1,,71,Windows公用對話框,CColorDialog CFileDialog CFindReplaceDialog CPageSetupDialog CFontDialog CPrintDialog,72,直接使用公用對話框類,73,Windows公用對話框,派生新類 對話框嵌套 創(chuàng)建帶有一個特殊成組框的對話框(成組框ID=0 x045f),74,第八章 使用ActiveX控件,1991年推出VB,同時引入VBX VBX被證明是成功的,但它是16位段結(jié)構(gòu)的,不能移植到32位系統(tǒng) Acti

24、veX是基于COM技術的VBX的強有力的替代 ActiveX的開發(fā)可以用MFC和ATL ActiveX可以在VB和VC中使用,75,普通控件和ActiveX控件,普通控件 都是子窗口(經(jīng)常在對話框中使用) 通過MFC類對象操控 客戶程序負責創(chuàng)建控件的子窗口 控件向父窗口發(fā)送標準Windows消息(BN_CLICKED) 父窗口通過調(diào)用對應控件的C++類的成員函數(shù)操作控件,76,普通控件和ActiveX控件,ActiveX控件 屬性和方法 屬性具有符號名字(可以匹配到整型索引)和類型 方法與函數(shù)非常相似 不是向控件容器發(fā)送WM_通知消息,而是“觸發(fā)”事件入Clicked事件 可以沒有窗口,窗口的

25、創(chuàng)建是通過控件自己(CreateIn place activation) 常用動態(tài)連接庫存放,但其擴展名是OCX,77,使用ActiveX控件,安裝 拷貝相關文件到系統(tǒng)目錄下(*.ocx,*.hlp,*.lic等) 運行Regsvr32 注冊 將想要的控件加到項目中,78,ActiveX控件容器的編程,Calender控件 訪問屬性 控件的C++包裝類 AppWizard中對ActiveX的支持 AfxEnableControlContainer() Stdafx.h中的#include 利用ClassWizard添加針對ActiveX控件的數(shù)據(jù)成員和事件處理函數(shù),79,數(shù)據(jù)成員,可以向?qū)υ捒?/p>

26、類添加兩種數(shù)據(jù)成員 針對ActiveX控件某個屬性的,可以在控件顯示出來之前控制其屬性的值 針對ActiveX控件的對象數(shù)據(jù)成員,可以方便地操作屬性等 映射控件事件 將控件鎖定在內(nèi)存種 AfxOleLockControl(m_Cal.GetClsId()) AfxOleUnlockControl( 一個示例,80,第九章 Internet Explorer 4控件,發(fā)布IE4的同時,帶有新的COMCTL32.DLL,稱IE4公用控件 IE4公用控件介紹 日期和時間選取器 月歷 IP協(xié)議地址控件 擴展組合框 示例,81,第十章 位圖,位圖就是一個位矩陣,影射到顯示器的象素點上。 GDI位圖和DI

27、B位圖 GDI位圖由MFC的類Cbitmap代表 GDI位圖在同一臺機器的不同程序間可以傳輸,但不同機器間不可以 DIB帶有自己的顏色信息 彩色位圖和單色位圖,82,使用GDI位圖,位圖也是GDI對象之一 首先創(chuàng)建位圖 創(chuàng)建內(nèi)存設備上下文CreateCompatibleDC 將位圖選入內(nèi)存設備上下文SelectObject 從內(nèi)存設備上下文將位圖畫到實際的設備上下文BitBlt或StretchBlt(),83,使用GDI位圖,從資源中裝載位圖,84,映射模式的效果,如果映射模式不是MM_TEXT,則位圖可能會變形 使用pDC-SetStretchBltMode(COLORONCOLOR);調(diào)用

28、可以使顯示效果好一些 也可以通過位圖拉伸解決問題 示例,85,DIB位圖/調(diào)色板編程,如果你的程序顯示單一DIB位圖 創(chuàng)建邏輯調(diào)色板(包含DIB位圖的顏色信息) 將邏輯調(diào)色板“實現(xiàn)”到硬件系統(tǒng)調(diào)色板中 如果你的程序是前臺程序,實現(xiàn)過程將把DIB位圖的所有顏色拷貝到系統(tǒng)調(diào)色板(236種顏色,20種由系統(tǒng)保留) 如果另一個程序是前臺程序,且要顯示236級的綠色場景,則在你的邏輯調(diào)色板和系統(tǒng)調(diào)色板之間建立映射,假如有一個品紅色,則將被映射位標準紅色,如果忘了實現(xiàn)調(diào)色板,則將被映射為綠色,86,何時“實現(xiàn)”調(diào)色板,任何程序?qū)崿F(xiàn)其調(diào)色板的時候,你的程序的主窗口將收到WM_PALETTECHANGED消息

29、 你程序中的任何一個窗口得到焦點時,WM_QUERYNEWPALETTE消息發(fā)送 在主框架窗口中應響應這兩種消息 用pDC-SelectPalette()將邏輯調(diào)色板選入 用RealizePalette 實現(xiàn),87,DIB、象素和顏色表,一個DIB由一個兩維的象素矩陣組成 每個象素由1、4、8、16、32個位組成 對于16bpp、24bpp、32bpp的DIB,每個象素是一個RGB顏色 1bpp、4bpp、8bpp的DIB,有一個顏色表,每個象素是一個指向顏色表的索引 當需要顯示的顏色多于顯示卡能顯示的顏色時: 如果DIB包含重要顏色表 CreateHalftonePalette,88,DIB

30、位圖的結(jié)構(gòu),89,DIB位圖的結(jié)構(gòu),BITMAPFILEHEADER結(jié)構(gòu) 包含到映象位矩陣的偏移量 BITMAPINFOHEADER DIB位映象按列、行組織 從最底行開始 每行填充到4字節(jié)對齊,90,DIB存取函數(shù),SetDIBitsToDevice:按一個位圖位顯示成一個顯示象素或一個打印點顯示 StretchDIBits:類似于StretchBlt() GetDIBits從一個GDI位圖構(gòu)建DIB CreateDIBitmap:從DIB構(gòu)建GDI位圖 CreateDIBSection:創(chuàng)建一個稱為DIB段的特殊DIB,返回一個GDI位圖句柄,91,構(gòu)建自己的Cdib類,示例,92,在按扭

31、上放置位圖,,93,第四部分 MFC文檔/視圖結(jié)構(gòu)詳解,,94,第一章 菜單、鍵盤加速器及屬性表,本章的主要內(nèi)容是菜單和命令路由架構(gòu) 同時介紹: 框架、文檔和視圖的關系 命令用戶接口更新函數(shù) 鍵盤加速器 以RichText控件和屬性表來介紹,95,主框架窗口,主框架窗口管理菜單條、標題條、工具條、狀態(tài)條及視圖窗口,96,Windows菜單,一般由水平菜單列表及附屬的彈出式菜單組成 一般為框架窗口定義默認的菜單資源,創(chuàng)建時自動裝載 也可以定義獨立的菜單,用戶程序負責裝載,97,鍵盤加速鍵,選擇菜單命令的快捷方式(定義菜單時字母前導 Windows應用的啟動過程 Windows將程序載入內(nèi)存 構(gòu)造

32、全局對象theApp Windows調(diào)用全局函數(shù)WinMain()AfxWinMain WinMain尋找唯一的一個CWinApp的派生類的對象 WinMain調(diào)用theApp的InitInstance()函數(shù) 重寫的InitInstance()啟動載入文檔并顯示主框架窗口和視圖窗口的進程 WinMain調(diào)用theApp的Run()函數(shù),進入消息循環(huán),127,文檔模板類,建立了應用類、文檔類、視圖類、框架窗口類之間的關系 MFC類中的DECLARE_DYNCREATE和實現(xiàn)部分的IMPLEMENT_DYNCREATE保證可以動態(tài)創(chuàng)建對象 對象的動態(tài)構(gòu)造,解決了用戶編碼復雜度問題; 使用RUNT

33、IME_CLASS宏通知框架,128,對象間的關系見圖,129,文檔模板資源,AddDocTemplate()的第一個參數(shù)是IDR_MAINFRAME,是字符串表的一個資源編號 其結(jié)構(gòu)如下:,130,CWinApp::OnFileNew(),在調(diào)用完InitInstance()之后,調(diào)用CWinApp::OnFileNew()通過CWinApp::ProcessShellCommand完成如下操作: 構(gòu)造文檔對象,但不載入數(shù)據(jù)(串行化) 構(gòu)造主框架對象,并創(chuàng)建主框架窗口(IDR_MAINFRAME菜單,工具條,狀態(tài)條),但不顯示 構(gòu)造視圖對象,并創(chuàng)建視圖窗口,但不顯示 建立文檔、主框架、視圖對

34、象之間的關系 調(diào)用虛擬CDocument::OnNewDocument,該函數(shù)調(diào)用 DeleteContents (實際中經(jīng)常需要重寫) 調(diào)用視圖的CView::OnInitialUpdate 函數(shù) 對框架對象調(diào)用虛擬的CFrameWnd::ActivateFrame ,顯示主框架窗口、菜單,工具條,狀態(tài)條,131,關于文檔類的其他操作,OnNewDocument()函數(shù),完成一些初始化操作 將文件打開操作和串行化代碼關聯(lián) 提示用戶選擇文件 對已存在的文檔對象,調(diào)用CDocument::OnOpenDocument ,該函數(shù)調(diào)用CDocument::DeleteContents,創(chuàng)建歸檔對象,

35、調(diào)用Serialize載入數(shù)據(jù) 調(diào)用CView::OnInitialUpdate() 文檔類的DeleteContents()虛擬函數(shù):如果你要從磁盤載入文檔數(shù)據(jù)(OnFileNew和OnFileOpen),先調(diào)用這個函數(shù),一般要重寫; 將存盤和另存操作和Serialize()關聯(lián),兩個操作都要調(diào)用OnSaveDocument(),OnSaveDocument()要調(diào)用Serialize() 文檔“臟”標志,文檔類的數(shù)據(jù)成員m_bModified表示,通過SetModifiedFlag()和IsModified() 示例,132,第五章 MDI應用程序的文檔讀寫,多文檔應用程序與單文檔應用程序

36、的啟動流程基本一致 多文檔模板類CMultiDocTemplate MDI框架窗口和子窗口:一個MDI應用擁有一個主框架窗口和多個子框架窗口 主框架窗口直接創(chuàng)建,而子框架窗口則在打開時創(chuàng)建,133,MDI應用程序的資源,主框架和文檔模板資源 MDI應用有兩個獨立的字符串和菜單資源分別由IDR_MAINFRAME和IDR_EXnnTYPE,前者代表只有空的主框架窗口時的資源,134,OnFileNew函數(shù),構(gòu)造文檔對象,但不載入數(shù)據(jù) 構(gòu)造子窗口對象,創(chuàng)建子窗口,但不顯示 構(gòu)造視圖對象,創(chuàng)建視圖窗口,但不顯示 建立文檔、子框架、視圖對象之間的關聯(lián) 調(diào)用OnNewDocument 調(diào)用OnIniti

37、alUpdate 對子框架窗口調(diào)用ActivateFrame,135,對已存在的文檔,創(chuàng)建另外的視圖,構(gòu)造子窗口對象,創(chuàng)建子窗口,但不顯示 構(gòu)造視圖對象,創(chuàng)建視圖窗口,但不顯示 建立文檔、子框架、視圖對象之間的關聯(lián) 調(diào)用OnInitialUpdate 對子框架窗口調(diào)用ActivateFrame,136,第六章 打印和打印予覽,Windows通過提供各種打印機的驅(qū)動程序和統(tǒng)一的編程接口簡化了打印編程,對編程用戶透明 標準打印機對話框 交互打印紙張選擇 打印時顯示顯示打印狀態(tài)(張數(shù)/打印張數(shù)),137,打印機編程,MFC框架為打印及打印予覽完成了大部分功能,為此必須了解打印過程中函數(shù)調(diào)用序列及哪些

38、函數(shù)要重寫; 打印需要的設備上下文由框架生成,并作為參數(shù) 顯示: OnPaint-OnDraw,顯示設備上下文 打?。篛nPrint-OnDraw,打印機設備上下文 OnPrint():每打印一頁,調(diào)用一次,可以添加打印特有的代碼,或也可以選擇不調(diào)用OnDraw,實現(xiàn)顯示與打印完全獨立; OnPrepareDC:,可以設置不同的映射模式,在OnPrint之前調(diào)用; OnPreparePrinting:是第一個調(diào)用的函數(shù),可以設置頁碼等; OnBeginPrinting:OnEndPrinting,138,打印機編程,幾個函數(shù)之間的關系: OnPreparePrinting:設置頁碼 OnBeg

39、inPrinting:創(chuàng)建GDI對象 OnPrepareDC:設置映射模式 OnPrint():具體完成打印 OnEndPrinting:刪除GDI對象,139,第五部分 MFC程序設計的其他方面,,140,第1章 多線程程序設計,非搶占式多任務和搶占式多任務 通過定時器實現(xiàn)的多任務 多線程編程 使用事件使線程同步,141,單線程程序消息處理,迄今為止所有實例為單線程,只有一個執(zhí)行路徑; 消息處理過程如下: MSG message; while (::GetMessage( 沒有消息時程序掛起;消息到來,喚醒,獲得消息、處理消息,142,Win32為搶占式多任務 可以在計算量很大的函數(shù)中

40、采用放棄控制權(quán)的方法避免死鎖; 一個使用定時器的實例,143,多線程編程主要工作: 定義全局或靜態(tài)函數(shù),其形式為: UINT FuncName(LPVOID pParam) 啟動線程: CWinThread* pThread = AfxBeginThread(FuncName, pParam, THREAD_PRIORITY_NORMAL); 線程間交互: 全局變量(::InterLockedIncrement()) 消息,144,線程同步的幾種技術: 事件、關鍵段、互斥、信號量 使用事件使線程同步 使用CEvent類,包含afxmt.h; 定義相應的CEvent對象,對象狀態(tài)為有信號和無信號

41、; 使用WaitForSingleObject和WaitForMultiObject在線程中獲取信號狀態(tài),達到控制線程的目的;,145,第2章 動態(tài)連接庫程序設計,Win32動態(tài)連接庫 靜態(tài)連接MFC的常規(guī)動態(tài)連接庫 共享連接MFC的常規(guī)動態(tài)連接庫 共享連接MFC的擴展動態(tài)連接庫,146,Win32動態(tài)連接庫,在不使用MFC功能的情況下 通過AppWizard生成Win32 DLL框架 加入要輸出的函數(shù)、變量、類 __declspec(dllexport)指定作為輸出函數(shù) __declspec(dllimport)在引用程序中指定輸入,147,Win32動態(tài)連接庫的引用,VC++下引用 需要庫

42、文件*.lib 需要頭文件 VB下引用 函數(shù)的調(diào)用格式是:_stdcall(或WINAPI) 需要模塊定義文件*.def,將函數(shù)名和順序號成對映射,148,客戶程序定位DLL順序,包含EXE文件的目錄 進程的當前目錄 Windows系統(tǒng)目錄 Windows目錄 列在Path環(huán)境變量中的目錄,149,靜態(tài)連接MFC的常規(guī)動態(tài)連接庫,可以適用于任意Win32編程環(huán)境(包括VB) DLL的大小比共享連接MFC時大 *.def文件 示例,150,共享連接MFC的常規(guī)動態(tài)連接庫,可以適用于任意Win32編程環(huán)境(包括VB) 要求目標機器上有合適的MFC動態(tài)連接庫 *.def文件 示例,151,共享連接M

43、FC的擴展動態(tài)連接庫,能導出C++類,將宏AFX_EXT_CLASS加入到類聲明中,如: class AFX_EXT_CLASS_CStudent:public Cobject 擴展DLL資源的搜索順序: EXE需要資源時:(1)EXE (2)擴展DLL (3)MFC庫 擴展DLL需要資源時: (1)擴展DLL (2)MFC DLL (3)EXE 可以如下改變搜索順序:,152,第3章 TCP/IP網(wǎng)絡程序設計,基于Socket的套接字編程實例。,153,建立基于Socket程序的步驟,Socket程序分服務器端和客戶端2部分AppWizard生成2個框架程序在各自InitInstance()

44、中執(zhí)行AfxSocketInit()函數(shù),框架初始化Socket套接字。服務器端需要一個監(jiān)聽套接字和若干伙伴套接字(異步套接字對象)客戶端需要一個用于連接的套接字對象,154,服務器端流程,155,客戶端流程,156,建立服務器端框架程序,157,建立客戶端框架程序,158,第4章 數(shù)據(jù)庫程序設計,關系數(shù)據(jù)庫基本概念 表、列、記錄、游標、事務 SQL語言: SELECT、INSERT、DELETE、UPDATE MFC支持以下數(shù)據(jù)庫接口 ODBC(OPEN DATABASE CONNECTIVITY) DAO(DATA ACCESS OBJECT) OLE DB ADO(ACTIVEX DAT

45、A OBJECT),159,4.1 DAO,微軟提供的針對Microsoft Jet數(shù)據(jù)庫引擎的接口 提供CDaoWorkspace、CDaoDatabase、CDaoRecordset、CDaoTableDef、CDaoQueryDef等類,160,4.2 ODBC/MFC,ODBC是訪問不同數(shù)據(jù)庫的通用接口,以API函數(shù)的形式提供 MFC ODBC是微軟對通用ODBC API以類的形式進行了封裝 提供CDatabase、CRecordSet、CRecordView類 必須覆蓋的虛擬成員函數(shù):GetDefaultSQL(),GetDefaultConnect(),161,4.3 ADO,AD

46、O是以組COM組件,可以以不同方式使用 VC++下使用其C++接口 提供ADOConnection、ADORecordset、ADOCommand、ADOField、ADOProperty、ADOParameter等類,162,ADO編程步驟,包含相關頭文件 #include #include #include 從CADORecordBiding類派生數(shù)據(jù)存取類,以將數(shù)據(jù)源的數(shù)據(jù)綁定到程序中 調(diào)用CoInitialize初始化COM 調(diào)用CoCreateInstance創(chuàng)建ADOConnection和ADOCommand實例,163,ADO編程步驟,創(chuàng)建或獲取一個ADORecordset實例

47、從這個記錄集對象獲取一個IADORecordBinding接口的指針 用Open方法打開已建立的記錄集(如是命令結(jié)果則不必) 調(diào)用IADORecordBinding的BindToRecordset函數(shù)綁定 然后進行瀏覽、插入、刪除、更新操作 示例,164,4.4 OLE DB,數(shù)據(jù)存取技術從數(shù)據(jù)庫發(fā)展向更一般的數(shù)據(jù)源 軟件開發(fā)的發(fā)展要求:使用組件形式的可重用軟件包 兩者結(jié)合導致UDA即統(tǒng)一數(shù)據(jù)存?。║niversal Data Access) UDA的重要組件:OLE DB 微軟還提供另一種獨立于語言的接口ADO,是基于OLE DB的,165,OLE DB,定義了以組接口,用于和一般的數(shù)據(jù)源交互,提供和消費數(shù)據(jù) 基于COM的 在標準的C/S模式中,數(shù)據(jù)的源成Provider,數(shù)據(jù)的使用者稱consumer 我們介紹OLE DB consumer程序的設計,166,OLE DB Consumer程序的設計,在工程中加入數(shù)據(jù)庫和COM支持 #include #include 初始化ATL 選擇數(shù)據(jù)源 針對數(shù)據(jù)集類編程 示例,

展開閱讀全文
溫馨提示:
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!