VC使用位图作为对话框或者控件背景

原文:http://blog.csdn.net/rjw1900/article/details/6336430

当使用位图作为贴图是,一般会用到StretchBlt()函数,这个函数会对位图进行缩放以适应目标区域

  1. BOOL StretchBlt (  
  2. int x,         
  3. int y,       //x,y是目标矩形的左上角坐标  
  4. int nWidth,  
  5. int nHeigth,  //这两个参数是目标矩形的宽度和高度  
  6. CDC* pSrcDC,  //位图的源位置,事先要把位图选入内存  
  7. int xSrc,  
  8. int ySrc,      //源位图的左上角坐标  
  9. int nSrcWidth,    
  10. int nSrcHeight,  //位图的宽度和高度  
  11. DWORD dwRop       //设置当位图贴到目标位置的时候使用哪种方式  
  12.                   //SRCCOPY  直接将位图复制到目标位置  
  13.                   //SRCINVERT  位图的各个位和目标区域的位做异或运算  
  14. )  

 

可见一个贴图程序,要有这几个步骤:

1:引入位图

2:获取位图的信息,宽度,高度

3:创建兼容DC  (windows程序设计中讲  也就是内存)

4:把位图选入兼容DC

5:获取目标区域信息

6:然后使用这个函数进行贴图

7:最后进行资源的释放

 

 

现在按照这个步骤写代码:

给一个对话框添加WM_ERASEBKGND消息,

 

  1. BOOL CBmpDlgDlg::OnEraseBkgnd(CDC* pDC)   
  2. {  
  3.     CBitmap bmp;  
  4.     bmp.LoadBitmap(IDB_BITMAP1);//引入位图  
  5.       
  6.     BITMAP struct_bmp;  
  7.     bmp.GetBitmap(&struct_bmp);//通过这个结构获取位图的信息  
  8.       
  9.     CDC memdc;  
  10.     memdc.CreateCompatibleDC(pDC);  //创建兼容DC  
  11.     memdc.SelectObject(bmp);        //把位图选入兼容DC(内存)  
  12.       
  13.     CRect rect;  
  14.     GetClientRect(&rect);            //获取目标区域,这里是整个对话框,  
  15.       
  16.     pDC->StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&memdc,0,0,struct_bmp.bmWidth,struct_bmp.bmHeight,SRCCOPY);                //贴图  
  17.       
  18.     memdc.DeleteDC();  
  19.     bmp.DeleteObject();              //释放资源  
  20.     return TRUE;  
  21.   
  22.     //return CDialog::OnEraseBkgnd(pDC);  //禁止调用基类的方法  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值