更改窗口客戶區的背景
看多了簡單的純白色背景客戶區,有沒有想過讓自己的程序中的客戶區變成以位圖(BMP)作為背景呢?那么下面提供的方法可以幫得到你。
接下來我會用兩種方法來實現將位圖加入顯示到客戶區中。不過首先要說的是,在此之前我們要準備好一張需要加到客戶區的位圖,并把它加入到程序的資源文件中。
第一種方法以BitBlt來實現。我
們新建一個單文檔MFC程序,把位圖加入到資源后,我們重點把代碼寫進C××View(此為繼承于CView的類)中的OnDraw函數中。也就是說在窗口重繪時就將圖片加進客戶區。
我們看源代碼:
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的對象中
?bitmap.LoadBitmap(IDB_BITMAP_TEXT);
?//創建一個設備對象
?CDC drawDC;
?//為指定設備創建信息上下文。這提供了一種不創建設備上下文即獲取有關設備信息的快速方式
?drawDC.CreateCompatibleDC(pDC);
?//加入位圖對象到DC對象
?drawDC.SelectObject(&bitmap);
?BITMAP bmpInfo;
?//獲取位圖信息
?bitmap.GetObject(sizeof(bmpInfo),&bmpInfo);
?//指定要執行的光柵操作。光柵操作代碼定義GDC如何合并輸出操作中的顏色,包括當前畫刷、可能的源位圖和目標位圖。
?pDC->BitBlt(0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,&drawDC,0,0,SRCCOPY);
}
測試一下,位圖是不是已經加入了客戶區呢?
第二種方法,是通過畫刷來對客戶區進行填充來實現的。
我們來看源代碼:
void CLoadBitmapView::OnDraw(CDC* pDC)
{
?CLoadBitmapDoc* pDoc = GetDocument();
?ASSERT_VALID(pDoc);
?// TODO: add draw code for native data here
?//選入設備
?CBitmap bitmap;
?bitmap.LoadBitmap(IDB_BITMAP_TEXT);
?CBrush bru;
?CRgn rgn;
?CRect rect;
?//獲取客戶區的區域信息
?GetClientRect(&rect);
?rgn.CreateRectRgnIndirect(&rect);
?//位圖指定的模式初始化畫刷
?bru.CreatePatternBrush(&bitmap);
?//用指定畫刷和指定區域來填充
?pDC->FillRgn(&rgn,&bru);
}
運行一下,是不是同樣可以實現呢?
from:
接下來我會用兩種方法來實現將位圖加入顯示到客戶區中。不過首先要說的是,在此之前我們要準備好一張需要加到客戶區的位圖,并把它加入到程序的資源文件中。
第一種方法以BitBlt來實現。我
們新建一個單文檔MFC程序,把位圖加入到資源后,我們重點把代碼寫進C××View(此為繼承于CView的類)中的OnDraw函數中。也就是說在窗口重繪時就將圖片加進客戶區。
我們看源代碼:
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的對象中
?bitmap.LoadBitmap(IDB_BITMAP_TEXT);
?//創建一個設備對象
?CDC drawDC;
?//為指定設備創建信息上下文。這提供了一種不創建設備上下文即獲取有關設備信息的快速方式
?drawDC.CreateCompatibleDC(pDC);
?//加入位圖對象到DC對象
?drawDC.SelectObject(&bitmap);
?BITMAP bmpInfo;
?//獲取位圖信息
?bitmap.GetObject(sizeof(bmpInfo),&bmpInfo);
?//指定要執行的光柵操作。光柵操作代碼定義GDC如何合并輸出操作中的顏色,包括當前畫刷、可能的源位圖和目標位圖。
?pDC->BitBlt(0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,&drawDC,0,0,SRCCOPY);
}
測試一下,位圖是不是已經加入了客戶區呢?
第二種方法,是通過畫刷來對客戶區進行填充來實現的。
我們來看源代碼:
void CLoadBitmapView::OnDraw(CDC* pDC)
{
?CLoadBitmapDoc* pDoc = GetDocument();
?ASSERT_VALID(pDoc);
?// TODO: add draw code for native data here
?//選入設備
?CBitmap bitmap;
?bitmap.LoadBitmap(IDB_BITMAP_TEXT);
?CBrush bru;
?CRgn rgn;
?CRect rect;
?//獲取客戶區的區域信息
?GetClientRect(&rect);
?rgn.CreateRectRgnIndirect(&rect);
?//位圖指定的模式初始化畫刷
?bru.CreatePatternBrush(&bitmap);
?//用指定畫刷和指定區域來填充
?pDC->FillRgn(&rgn,&bru);
}
運行一下,是不是同樣可以實現呢?
from:
posted on 2006-11-16 20:03 weidagang2046 閱讀(936) 評論(0) 編輯 收藏 所屬分類: Windows