看多了简单的纯白色背景客户区,有没有想过让自己的程序中的客户区变成以位图(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: