《c語(yǔ)言學(xué)習(xí)》PPT課件.ppt

上傳人:za****8 文檔編號(hào):14488693 上傳時(shí)間:2020-07-21 格式:PPT 頁(yè)數(shù):166 大?。?.17MB
收藏 版權(quán)申訴 舉報(bào) 下載
《c語(yǔ)言學(xué)習(xí)》PPT課件.ppt_第1頁(yè)
第1頁(yè) / 共166頁(yè)
《c語(yǔ)言學(xué)習(xí)》PPT課件.ppt_第2頁(yè)
第2頁(yè) / 共166頁(yè)
《c語(yǔ)言學(xué)習(xí)》PPT課件.ppt_第3頁(yè)
第3頁(yè) / 共166頁(yè)

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

14.9 積分

下載資源

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

資源描述:

《《c語(yǔ)言學(xué)習(xí)》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《c語(yǔ)言學(xué)習(xí)》PPT課件.ppt(166頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

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

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

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

4、和按扭消息的處理與Windows消息一樣。 一個(gè)MFC消息處理程序需要一個(gè)函數(shù)原型、一個(gè)函數(shù)體和一個(gè)在消息映射中的項(xiàng)。,24,MFC庫(kù)消息映射,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ù)模型,基類(lèi)是CDocument 視圖----代表用戶(hù)接口,基

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

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

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

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

9、oint),通過(guò)消息映射宏將框架和函數(shù)關(guān)聯(lián),將消息和消息的響應(yīng)函數(shù)連接的過(guò)程稱(chēng)為消息映射。,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),通過(guò)一些狀態(tài)的變化反映事件,在引入文檔類(lè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,如何反映事件,鼠標(biāo)點(diǎn)擊不會(huì)引起重畫(huà),需要調(diào)用: CWnd::InvalidateRect(LPRECT rect); 視圖的客戶(hù)區(qū): CRect,CSize,Cpoint及其相互運(yùn)算 如何判斷點(diǎn)在矩形內(nèi)部 CRect rect; if(rect.PtInRect(point)... 如何判斷點(diǎn)在區(qū)域內(nèi)部 CRgn

11、rgn; rgn.CreateEllipticRgnIndirect(m_rectEllipse); if(rgn.PtInRegion(point)... 實(shí)例,36,映射方式,為使顯示與顯示分辨率無(wú)關(guān),應(yīng)使用不同于以像素為單位的坐標(biāo)系統(tǒng) 設(shè)備坐標(biāo)----以像素表示的坐標(biāo)值。 邏輯坐標(biāo)----當(dāng)前映射方式下的坐標(biāo)值。 映射方式----邏輯坐標(biāo)和設(shè)備坐標(biāo)之間的比例關(guān)系。 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映射方式,邏輯坐標(biāo)和設(shè)備坐標(biāo)1:1 坐標(biāo)X向右增加,坐標(biāo)Y向下增加 通過(guò)調(diào)用CDC的SetWindowOrg,SetViewportOrg改變?cè)c(diǎn) CMyView::OnDraw(CDC* pDC) pDC-SetMapMode(MM_TEXT); pDC-SetWindowOrg(CPoint(100,100)); //將邏輯坐標(biāo)(100,100)設(shè)置為窗口原點(diǎn) ,38,自定義映射方式一:固定縮放的映射方式,向右X增加,向下Y減少,39,自定義映射方式二: 縮放可變的映射方式,可以改變縮放因子和原點(diǎn) MM_ISOT

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

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

15、、刷子、字體 映射方式 其他方面(文本對(duì)齊方式、填充方式等),46,CPaintDC類(lèi),重寫(xiě)了OnPaint函數(shù)后,需要用到CPaintDC類(lèi) OnPaint用正確設(shè)置的CPaintDC調(diào)用OnDraw();,47,圖形設(shè)備接口對(duì)象,CBitmap CBrush CFont CPalatte CPen CRgn,48,如何構(gòu)造和銷(xiāo)毀,一步構(gòu)造 CPen newPen(PS_DASHDOTDOT, 2, (COLORREF) 0); 先定義對(duì)象,再創(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 如何斷開(kāi)其與設(shè)備上下文的關(guān)系 先選出設(shè)備上下文,然后析構(gòu) 庫(kù)存GDI對(duì)象自動(dòng)析構(gòu),49,Windows顏色映射,Windows圖形設(shè)備接口提供獨(dú)立于硬件的顏色接口 程序中的絕對(duì)顏色代碼由圖形設(shè)備接口映射到視頻卡的某種或某幾種顏色的組合。 VGA模式下提供16種標(biāo)準(zhǔn)純色 256色視頻卡提供20種標(biāo)準(zhǔn)純色 16位顏色視頻卡,可以顯示32768中顏色。 24位真彩色。,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

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

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

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


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

五月丁香婷婷狠狠色,亚洲日韩欧美精品久久久不卡,欧美日韩国产黄片三级,手机在线观看成人国产亚洲