參考:http://bbs.csdn.net/topics/30173861 參考:http://bbzoh.cn/content/13/0507/21/10724725_283723432.shtml Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 轉(zhuǎn)載請標(biāo)明來源 所用的圖形都是繪制到設(shè)備上來的(CDC),,繪制前也需要綁定圖紙(CBitmap)先 介紹基礎(chǔ):HDC/CDC轉(zhuǎn)換 CBitMap/HBITMAP/Bitmap轉(zhuǎn)換HDC: Handle to a device context (DC). // 設(shè)備dc的句柄 CDC: Defines a class of device-context objects. // 封裝設(shè)備dc CBitmap: Encapsulates a Windows graphics device interface (GDI) bitmap and provides member functions to manipulate the bitmap. //封裝Bitmap HBITMAP: Handle to a bitmap. // bitmap的句柄 Bitmap: This class inherits from the Image class. // 圖形,、圖紙 轉(zhuǎn)換關(guān)系上: CDC->HDC CBitmap->HBITMAP都是一樣的方法,,通過GetSafeXX()獲取的Handle HDC hDc = dc.GetSafeHdc(); HBITMAP hBitmap= HBITMAP(bitmap.GetSafeHandle()); // dc.Detach 同樣會返回一個HBITMAP指針 HDC->CDC HBITMAP->CBitmap 方法也類似,通常使用Attach/Detach完成使用和關(guān)閉 CDC dc; dc.Attach(hDc); 使用完畢后 dc.Detach(). CBitmap bitmap; bitmap.Attach(HBITMAP); 使用完畢后 bitmap.Detach(); CBitmap->Bitmap: 通過GetBitmap獲取Bitmap,,形如:Bitmap bmp; bitmap.GetBitmap(bmp); HBITMAP->Bitmap: 通過GetObject獲取Bitmap,,形如:Bitmap bmp; GetObject(hBitmap, sizeof(Bitmap), (LPSTR)&bmp); Bitmap->HBITMAP: 通過GetHBITMAP獲取HBITMAP,形如:bmp.GetHBITMAP(RGB(0,0,0), &hBitmap);
構(gòu)建設(shè)備&選擇圖紙:SelectObject當(dāng)我們創(chuàng)建一個內(nèi)存dc時,,如果沒有綁定圖紙,是不能夠繪制出信息的,,綁定圖紙的方法如下:形如memDC.SelectObject(&memBitmap);
接下來,,就可以使用memDC進行繪制,調(diào)用memDC.LineTo/Draw3dRect等等,,繪制完成后,,可以使用下面的BitBlt來吧內(nèi)容copy到static框中來 m_static.GetDC()->BitBlt(0,0,200,200,&memDC,50,50,SRCCOPY); 附加說明:BitBlt方法可以復(fù)制設(shè)備dc的一段圖紙的信息出來,貼到另一個設(shè)備dc中 (注意CreareCompatibleDC對應(yīng)的DeleteDC釋放) (注意CreateCompatibleBitmap對應(yīng)的DeleteObject釋放)
采用提出要求和給出實現(xiàn)方法布置下面的實現(xiàn): 要求: 在Dialog中添加了一個圖片組件框(綁定CStatic變量),,要把某個圖片顯示到這個里面實現(xiàn)方法1:借用CImage中對圖片的支持 a. 修改Static框為Bitmap模式 設(shè)置屬性-雜項-type:Bitmap (也可以在OnInitDialog代碼中添加屬性修改:m_staticPic.ModifyStyle(SS_ENHMETAFILE,SS_BITMAP|SS_CENTERIMAGE); b. 加載圖片&設(shè)置到Static中,,在OnInitDialog中
實現(xiàn)方法2:導(dǎo)入到工程里的Bitmap文件,借用LoadBitmap a. 同樣的修改CStatic框為BItmap模式
b. 加載圖片&設(shè)置到Static中
實現(xiàn)方法3:借助Gdiplus::Bitmap加載圖片 a. 同樣的修改CStatic框為Bitmap模式
b. 在構(gòu)造函數(shù)中初始化gdi/關(guān)閉gdi
c. 使用gdi相關(guān)的函數(shù)打開文件&設(shè)置給static框
a. 重載Dialog的OnPaint函數(shù),,在OnPaint函數(shù)中添加代碼:例如,,繪制一個彩色的框 聲明一個CPaintDC,綁定static框,,然后繪制
a. 同樣的修改CStatic框為Bitmap模式
b. 創(chuàng)建圖形&圖形綁定給static框
最后一步綁定static框,也可以采用復(fù)制的方法,,從memdc中直接復(fù)制一段信息: m_static.GetDC()->BitBlt(0,0,200,200,&memDC,50,50,SRCCOPY);
實現(xiàn)方法六:使用Cimage在內(nèi)存中創(chuàng)建一個圖形,,綁定給 static框 a. 同樣的修改CStatic框為Bitmap模式
b. 創(chuàng)建圖形,使用SetPixelRGB設(shè)置顏色
實現(xiàn)方法七:Cimage和CBitmap混用,實現(xiàn)類似水印效果 a. 同樣的修改CStatic框為Bitmap模式
b. 創(chuàng)建Cimage,,先繪制一些信息
c. 創(chuàng)建內(nèi)存DC,,Cimage作為CBitmap綁定給MemDC,繪制附加信息
d. 綁定給Static框
注意:如果使用CBitmap.attach接受image.Detach時,,需要注意對cbitmap進行detach,,否則CBitmap生命周期結(jié)束,會釋放資源,,導(dǎo)致圖片不顯示
|
|
來自: just4peterpan > 《待分類》