看多了簡單的純白色背景客戶區(qū),有沒有想過讓自己的程序中的客戶區(qū)變成以位圖(BMP)作為背景呢?那么下面提供的方法可以幫得到你。
接下來我會(huì)用兩種方法來實(shí)現(xiàn)將位圖加入顯示到客戶區(qū)中。不過首先要說的是,在此之前我們要準(zhǔn)備好一張需要加到客戶區(qū)的位圖,并把它加入到程序的資源文件中。
第一種方法以BitBlt來實(shí)現(xiàn)。我
們新建一個(gè)單文檔MFC程序,把位圖加入到資源后,我們重點(diǎn)把代碼寫進(jìn)C××View(此為繼承于CView的類)中的OnDraw函數(shù)中。也就是說在窗口重繪時(shí)就將圖片加進(jìn)客戶區(qū)。
我們看源代碼:
void CLoadBitmapView::OnDraw(CDC* pDC) {
?CLoadBitmapDoc* pDoc = GetDocument();
?ASSERT_VALID(pDoc);
?// TODO: add draw code for native data here?
?CBitmap bitmap;
?//這里的IDB_BITMAP_TEXT是我的工程中的位圖資源
?//將位圖資源加入到CBitmap的對(duì)象中
?bitmap.LoadBitmap(IDB_BITMAP_TEXT);
?//創(chuàng)建一個(gè)設(shè)備對(duì)象
?CDC drawDC;
?//為指定設(shè)備創(chuàng)建信息上下文。這提供了一種不創(chuàng)建設(shè)備上下文即獲取有關(guān)設(shè)備信息的快速方式
?drawDC.CreateCompatibleDC(pDC);
?//加入位圖對(duì)象到DC對(duì)象
?drawDC.SelectObject(&bitmap);
?BITMAP bmpInfo;
?//獲取位圖信息
?bitmap.GetObject(sizeof(bmpInfo),&bmpInfo);
?//指定要執(zhí)行的光柵操作。光柵操作代碼定義GDC如何合并輸出操作中的顏色,包括當(dāng)前畫刷、可能的源位圖和目標(biāo)位圖。
?pDC->BitBlt(0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,&drawDC,0,0,SRCCOPY);
}
測(cè)試一下,位圖是不是已經(jīng)加入了客戶區(qū)呢?
第二種方法,是通過畫刷來對(duì)客戶區(qū)進(jìn)行填充來實(shí)現(xiàn)的。
我們來看源代碼:
void CLoadBitmapView::OnDraw(CDC* pDC)
{
?CLoadBitmapDoc* pDoc = GetDocument();
?ASSERT_VALID(pDoc);
?// TODO: add draw code for native data here
?//選入設(shè)備
?CBitmap bitmap;
?bitmap.LoadBitmap(IDB_BITMAP_TEXT);
?CBrush bru;
?CRgn rgn;
?CRect rect;
?//獲取客戶區(qū)的區(qū)域信息
?GetClientRect(&rect);
?rgn.CreateRectRgnIndirect(&rect);
?//位圖指定的模式初始化畫刷
?bru.CreatePatternBrush(&bitmap);
?//用指定畫刷和指定區(qū)域來填充
?pDC->FillRgn(&rgn,&bru);
}
運(yùn)行一下,是不是同樣可以實(shí)現(xiàn)呢?
from: