freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

實(shí)踐教程第三章第二版-資料下載頁

2025-01-21 23:38本頁面
  

【正文】 派生類封裝了各種繪圖工具。 GDI對(duì)象 用途 默認(rèn)值 Cpen 畫筆類,畫直線、曲線和各種圖形邊框,可改變顏色,線型,線寬 黑實(shí)線,寬一個(gè)像素 CBrush 畫刷類,填充各種圖形的內(nèi)部,可改變顏色和填充圖案 白色畫刷 CFont 字體類,改變字體的屬性 系統(tǒng)字體 CBitmap 位圖類,嵌入或操作位圖 無 CRgn 區(qū)域類,操作由橢圓或矩形組合的各種區(qū)域,常與 CDC的剪切函數(shù)配合使用 無 CPalette 調(diào)色板類,封裝了 Windows調(diào)色板,允許創(chuàng)建調(diào)色板對(duì)象,修改其屬性 無 a)GDI對(duì)象的構(gòu)造 調(diào)用 GDI類的構(gòu)造函數(shù)產(chǎn)生一個(gè) GDI對(duì)象 CPen pen1(PS_SOLID,0,RGB(0,255,0))。 或: CPen pen1。 (PS_SOLID,0,RGB(255,0,0))。 b)CDC與 GDI對(duì)象 應(yīng)用程序本身不需要構(gòu)造 GDI對(duì)象,程序中構(gòu)造一個(gè) CDC對(duì)象后,系統(tǒng)為其提供了默認(rèn)的屬性和默認(rèn)的 GDI對(duì)象,但 CDC封裝了對(duì) GDI操作的成員函數(shù),可以修改相關(guān)屬性,如 SetTextColor();也可選擇自定義的 GDI對(duì)象。 Windows預(yù)定義了標(biāo)準(zhǔn) GDI對(duì)象,供系統(tǒng)和程序使用,稱為 備用 GDI對(duì)象 ,可為多個(gè)程序同時(shí)使用。備用對(duì)象包括最常用的字體、畫筆、畫刷等 ,用函數(shù) CDC:: SelectStockObject選擇備用對(duì)象,并返回原值。 CPen pen1。 //自定義畫筆 (PS_SOLID,0,RGB(255,0,0))。 CPen *poldPen = pDCSelectObject(amp。pen1)。 //選擇新畫筆,返回并保存原值 CBrush *poldBrush = pDC SelectStockObject (NULL_BRUSH)。 //選擇備用空畫刷 CRect rect1(0,0,400,400)。 //定義矩形 pDCRectangle(amp。rect1)。 //畫出空心矩形 pDCSelectObject(poldBrush)。 //恢復(fù)原值 表 GDI對(duì)象 GDI對(duì)象 預(yù)定義值 字體 ANSI_FIXED_FONT ANSI_VAR_FONT DEVICE_DEFAULT_FONT OEM_FIXED_FONT SYSTEM_FONT 畫筆 BLACK_PEN WHITE_PEN NULL_PEN 畫刷 BLACK_BRUSH DKGRAY_BRUSH GRAY_BRUSH HOLLOW_BRUSH LTGRAY_BRUSH WHITE_BRUSH NULL_BRUSH(透明畫刷 ) c)畫筆 CPen使用 畫筆有線型、線寬、顏色三種屬性,在構(gòu)造畫筆時(shí)需 提供它們的信息。 線型有七種,分別為: 實(shí)線 PS_SOLID 點(diǎn)線 PS_DOT 虛線 PS_DASH 點(diǎn)畫線 PS_DASHDOT 雙點(diǎn)畫線 PS_DASHDOTDOT空畫筆 PS_NULL 畫圖形內(nèi)框 PS_INSIDEFRAME d)畫刷 CBrush使用 畫刷用于填充區(qū)域,有三類畫刷。根據(jù)畫刷類型不同, CBrush有多個(gè)構(gòu)造函數(shù)。 畫刷 參數(shù) 創(chuàng)建畫刷方法 實(shí)心畫刷 COLORREF值 CBrush brush。 (RGB(dd,dd,dd)) 陰影填充畫刷 HS_HORIZONTAL HS_VERTICAL HS_FDIAGONAL HS_BDIAGONAL HS_CROSS HS_DIAGCROSS CBrush brush。 (HS_CROSS,RGB(dd,dd,dd)) 位圖畫刷 CBitmap指針 CBitmap bitmap。 (IDB_BITMAP1)。 CBrush brush。 (amp。bitmap) e)區(qū)域使用 CRgn類封裝了窗口的 GDI區(qū)域,該區(qū)域可以是由一個(gè)或多個(gè)橢圓形或多邊形合成的,通常將CRgn的成員函數(shù)與 CDC的剪切成員函數(shù)結(jié)合使用,實(shí)現(xiàn)多種圖形顯示方式。 面向?qū)ο蠹夹g(shù)有一個(gè)術(shù)語 ―― 永久保存(Persistence),即保存應(yīng)用程序的各種信息。 MFC支持兩種永久保存:序列化和應(yīng)用程序狀態(tài)保存。 序列化 (Serialization)是指程序的數(shù)據(jù)保存到文件或從文件讀出。應(yīng)用程序框架提供了完成序列化的大多數(shù)結(jié)構(gòu),程序開發(fā)人員只需要完成針對(duì)特定應(yīng)用的數(shù)據(jù)序列化代碼。 應(yīng)用程序運(yùn)行狀態(tài)保存通過注冊(cè)表完成。 1. 序列化 序列化是將數(shù)據(jù)從應(yīng)用程序?qū)懭霐?shù)據(jù)文件或從數(shù)據(jù)文件讀入應(yīng)用程序的過程。序列化在文檔 /視圖結(jié)構(gòu)中完成,當(dāng)用戶要保存或讀出數(shù)據(jù)時(shí)發(fā)生序列化過程,當(dāng)文檔數(shù)據(jù)發(fā)生變化時(shí),序列化會(huì)提示用戶保存數(shù)據(jù)。 序列化過程從文檔類對(duì)象序列化開始,文檔類可直接序列化普通數(shù)據(jù),或序列化對(duì)象成員。成員對(duì)象各自的類完成自身數(shù)據(jù)序列化操作。 (3)CArchive為序列化提供一個(gè)上下文。 (1)CObject類是所有可序列化類的基類,它提供了 序列化的協(xié)議和功能,只有派生自 CObject的類才能序 列化。 (2)CDocument類存儲(chǔ)應(yīng)用程序的數(shù)據(jù) (數(shù)據(jù)成員和對(duì)象成員 ) MFC中與序列化相關(guān)的類 (4)CFile代表存儲(chǔ)在磁盤介質(zhì)上的文件,直接支持非緩沖文件和二進(jìn)制文件讀寫,其派生類支持文本文件和內(nèi)存文件。 讀寫過程如下圖 : Serialize 2. 運(yùn)行時(shí)類型信息 從文件讀入對(duì)象時(shí) , 程序根據(jù)運(yùn)行時(shí)類型信息(Runtime class information即 RTTI)來判斷要讀入的對(duì)象類型 , 從而動(dòng)態(tài)地構(gòu)造 (重構(gòu) )恰當(dāng)?shù)膶?duì)象 。 每創(chuàng)建一個(gè)新的對(duì)象,都記錄必要的類型信息,產(chǎn)生一個(gè)類型信息結(jié)構(gòu),構(gòu)成運(yùn)行時(shí)類型信息表(鏈表 ),以便運(yùn)行時(shí)進(jìn)行類型檢查。類型信息由CRuntimeClass結(jié)構(gòu) 記錄。 struct CRuntimeClass { LPCSTR m_lpszClassName。 //類名 int m_nObjectSize。 UINT m_wSchema。 //版本號(hào) CObject * (PASCAL* m_pfnCreateObject) ( )。 //函數(shù)指針 , 指向該類的缺省構(gòu)造函數(shù) CRuntimeClass *m_pBaseClass。 //指向基類的運(yùn)行時(shí)信息結(jié)構(gòu) static CRuntimeClass *pFirstClass。 //鏈表頭指針 , 靜態(tài)成員 , 只有一個(gè) CRuntimeClass *m_pNextClass。 //指向鏈表下一對(duì)象 }。 CRuntimeClass 作為可序列化類的公共基類 , CObject定義中包含下面的代碼: class CObject{ public: virtual CRuntimeClass* GetRuntimeClass() const。 … //返回當(dāng)前類的運(yùn)行時(shí)信息結(jié)構(gòu)指針 static CRuntimeClass classObject。 //靜態(tài)數(shù)據(jù)成員 , 新創(chuàng)建類的信息存儲(chǔ)在此 }。 CRuntimeClass* CObject::GetRuntimeClass() const { return amp。CObject::classObject。 } CRuntimeClass* CRuntimeCalss::pFirstClass = NULL。 //初始化存放運(yùn)行時(shí)信息的鏈表為空 說明: CObject派生類在構(gòu)造對(duì)象時(shí),類型信息被記錄在其 classobject結(jié)構(gòu)成員中,程序中構(gòu)造的全部對(duì)象通過結(jié)構(gòu)體的 m_pNextClass指針構(gòu)成一個(gè)類型信息表鏈表相互關(guān)聯(lián)。 將程序 (文檔 )數(shù)據(jù)保存至文件時(shí),運(yùn)行時(shí)類型信息也被寫入文件;從文件讀入對(duì)象時(shí),程序根據(jù)運(yùn)行時(shí)類型信息表中的記錄判斷要讀入的對(duì)象類型,調(diào)用其缺省構(gòu)造函數(shù),動(dòng)態(tài)地重構(gòu)對(duì)象。 3. 與序列化相關(guān)的命令 選項(xiàng) 響應(yīng)方式 調(diào)用的虛函數(shù) SDI MDI File|New 被修改,若是,提示用戶保存當(dāng)前文檔 CDocument::OnNewDocument重定義這個(gè)函數(shù)進(jìn)行文檔初始化,如動(dòng)態(tài)申請(qǐng)對(duì)象 CDocument::DeleteContents重定義這個(gè)函數(shù)刪除動(dòng)態(tài)分配的對(duì)象 創(chuàng)建新文檔及視圖 CDocument:: OnNewDocument CDocument::DeleteContents File| Open 被修改,若是,提示用戶保存當(dāng)前文檔 框,接受用戶輸入 3. 清空舊文檔,反序列化讀入新文檔 CDocument::OnOpenDocument在這個(gè)函數(shù)中進(jìn)行文檔初始化 CDocument::DeleteContents重定義這個(gè)函數(shù)刪除動(dòng)態(tài)分配的對(duì)象 CDocument::Serialize讀入文檔數(shù)據(jù) 創(chuàng)建新文檔及視圖 CDocument:: OnNewDocument CDocument:: OnOpenDocument CDocument::Serialize讀入文檔數(shù)據(jù) File|Save 保存文檔數(shù)據(jù)和對(duì)象 CDocument::Serialize保存數(shù)據(jù) CDocument::Serialize File| Colse 被修改,若是,提示用戶保存當(dāng)前文檔 因?yàn)?SDI有且只有一個(gè)文檔,無此命令 CDocument::IsModified CDocument::DeleteContents 文檔類的析構(gòu)函數(shù)清除文檔對(duì)象 4. 文檔類的序列化 如果創(chuàng)建的應(yīng)用程序 不使用數(shù)據(jù)庫 , AppWizard為文檔類自動(dòng)生成 Serialize函數(shù)的框架,由開發(fā)人員完成具體的序列化代碼。 void CMyDoc::Serialize ( CArchive amp。 ar) { if(( )) { //TODO: add storing code here } else { //TODO: add loading code here } } a)將類的基類定義為 CObject或其派生類; b)在類的聲明中定義一個(gè)缺省構(gòu)造函數(shù) (不帶任何參數(shù) )。 5. 創(chuàng)建一個(gè)可序列化類 d)在類的定義文件 (cpp文件 )中,添加 IMPLEMENT_SERIAL宏,它需要三個(gè)參數(shù),分別是需要序列化的類名,其基類名及版本號(hào) 。 e)重定義 Serialize函數(shù),其參數(shù)是一個(gè) CArchive對(duì)象的引用。 c)在類的聲明中,添加 DECLARE_SERIAL宏,以類名為 唯一參數(shù); 只有派生自 CObject且重載了 Serialize函數(shù)的類才能實(shí)現(xiàn)序列化, MFC定義了兩個(gè)宏支持序列化,它們是 DECLARE_SERIAL和 IMPLEMENT_SERIAL 6. 類的序列化 當(dāng)數(shù)據(jù)為文檔類的對(duì)象成員時(shí) // class CEx3_1Doc : public CDocument { CStudent m_Student。 //對(duì)象成員 …}。 // void CEx3_1Doc::Serialize(CArchiveamp。 ar) { (ar)。 //調(diào)用對(duì)象的序列化函數(shù) } 有了可序列化類,就可作為文檔的數(shù)據(jù)參與序列化 . 若數(shù)據(jù)是指向?qū)ο蟮闹羔?,參?下例 。 class CEx3_1Doc : public CDocument { CStudent *m_pStudent?!瓆。 CEx3_1Doc::CEx3_1Doc():m_pStudent(0) { } //對(duì)象指針初始化為 0 void CEx3_1Doc::Serialize(CArchiveamp。 ar) { if (()) { ar m_pStudent。 } else { ar m_pStudent。 } } 當(dāng)然還要修改文檔類的 OnNewDocment 和DeleteContents函數(shù)。 BOOL CEx3_1Doc::OnNewDocument( ) { if (!CDocument::OnNewDocument()) return FALSE。 m_pStudent = new CStudent。 //構(gòu)造對(duì)象 return TRUE。 } void CEx3_1Doc::DeleteContents() { delete m_pStudent。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1