原文:http://blog.youkuaiyun.com/rjw1900/article/details/6336430
当使用位图作为贴图是,一般会用到StretchBlt()函数,这个函数会对位图进行缩放以适应目标区域
- BOOL StretchBlt (
- int x,
- int y, //x,y是目标矩形的左上角坐标
- int nWidth,
- int nHeigth, //这两个参数是目标矩形的宽度和高度
- CDC* pSrcDC, //位图的源位置,事先要把位图选入内存
- int xSrc,
- int ySrc, //源位图的左上角坐标
- int nSrcWidth,
- int nSrcHeight, //位图的宽度和高度
- DWORD dwRop //设置当位图贴到目标位置的时候使用哪种方式
- //SRCCOPY 直接将位图复制到目标位置
- //SRCINVERT 位图的各个位和目标区域的位做异或运算
- )
可见一个贴图程序,要有这几个步骤:
1:引入位图
2:获取位图的信息,宽度,高度
3:创建兼容DC (windows程序设计中讲 也就是内存)
4:把位图选入兼容DC
5:获取目标区域信息
6:然后使用这个函数进行贴图
7:最后进行资源的释放
现在按照这个步骤写代码:
给一个对话框添加WM_ERASEBKGND消息,
- BOOL CBmpDlgDlg::OnEraseBkgnd(CDC* pDC)
- {
- CBitmap bmp;
- bmp.LoadBitmap(IDB_BITMAP1);//引入位图
- BITMAP struct_bmp;
- bmp.GetBitmap(&struct_bmp);//通过这个结构获取位图的信息
- CDC memdc;
- memdc.CreateCompatibleDC(pDC); //创建兼容DC
- memdc.SelectObject(bmp); //把位图选入兼容DC(内存)
- CRect rect;
- GetClientRect(&rect); //获取目标区域,这里是整个对话框,
- pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memdc,0,0,struct_bmp.bmWidth,struct_bmp.bmHeight,SRCCOPY); //贴图
- memdc.DeleteDC();
- bmp.DeleteObject(); //释放资源
- return TRUE;
- //return CDialog::OnEraseBkgnd(pDC); //禁止调用基类的方法
-