weidagang2046的专栏

物格而后知致
随笔 - 8, 文章 - 409, 评论 - 101, 引用 - 0
数据加载中……

更改窗口客户区的背景

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

posted on 2006-11-16 20:03 weidagang2046 阅读(923) 评论(0)  编辑  收藏 所属分类: Windows


只有注册用户登录后才能发表评论。


网站导航: