第四课,别给我框框

学习利用位图拷贝BitBlt()的逻辑运算生成透明位图的方法。


介绍刷屏和一个最简单的刷屏方法。


 介绍了VC的编译模式的设置方法。

 

重点:透明位图的原理和生成方法。

 

  
  
  
  
  1. MemDC =CreateCompatibleDC(0);        //创建两个兼容dc,图像dc 
  2.     DCBak =CreateCompatibleDC(0);        //背景dc   
  3.  
  4.  
  5.  
  6. void CMyDlg::OnTimer(UINT nIDEvent) //加载人的图片 
  7. {   CClientDC dc(this); 
  8.     int x=200,y=200; 
  9.     BitBlt(dc.m_hDC,x,y,100,100,DCBak,x,x,SRCCOPY); //将地图的200,200,的像素拷贝到dc中 
  10.                                                     //dc.m_hDC可以说是背景设备描述表 
  11.     if(getpic("人",p)==FALSE) 
  12.             {AfxMessageBox(cc+"没找到!");return;} 
  13.     SelectObject(MemDC,bit); 
  14.  
  15.     TransparentBlt2(dc.m_hDC,x,y,w,h,MemDC,0,0,w,h,RGB(255,255,255));//显示透明背景的位图 
  16.     p++; 
  17.     if(p>m1) p=m0;   
  18.  
  19.     CDialog::OnTimer(nIDEvent); 

创建透明背景的位图算法

 

  
  
  
  
  1. void TransparentBlt2( HDC hdc0,  
  2.                     int nX0,int nY0, 
  3.                     int nW0,int nH0, 
  4.                     HDC hdc1, 
  5.                     int nX1,int nY1, 
  6.                     int nW1,int nH1, 
  7.                     UINT Tcol 
  8.                     ) 
  9. {   HBITMAP hBMP   =CreateCompatibleBitmap(hdc0,nW0, nH0);// 创建兼容位图 
  10.     HBITMAP mBMP   =CreateBitmap(nW0,nH0,1,1,NULL);   // 创建单色掩码位图 
  11.     HDC     hDC    =CreateCompatibleDC(hdc0); 
  12.     HDC     mDC    =CreateCompatibleDC(hdc0); 
  13.     HBITMAP oldBMP =(HBITMAP)SelectObject(hDC, hBMP); 
  14.     HBITMAP oldmBMP=(HBITMAP)SelectObject(mDC, mBMP); 
  15.  
  16.     if (nW0==nW1&&nH0==nH1)// 将源DC中的位图拷贝到临时DC中 
  17.         BitBlt(hDC,0,0,nW0,nH0,hdc1,nX1,nY1,SRCCOPY); 
  18.     else 
  19.         StretchBlt(hDC,0,0,nW0,nH0,hdc1,nX1,nY1,nW1,nH1,SRCCOPY); 
  20.  
  21.     SetBkColor(hDC, Tcol); // 设置透明色 
  22.     BitBlt(mDC,0,0,nW0,nH0,hDC,0,0,SRCCOPY); // 生成透明区域为白色,其它区域为黑色的掩码位图 
  23.  
  24.      // 生成透明区域为黑色,其它区域保持不变的位图 
  25.     SetBkColor(hDC, RGB(0,0,0)); 
  26.     SetTextColor(hDC, RGB(255,255,255)); 
  27.     BitBlt(hDC,0,0,nW0,nH0,mDC,0,0,SRCAND); 
  28.  
  29.     // 透明部分保持屏幕不变,其它部分变成黑色 
  30.     SetBkColor(hdc0,RGB(255,255,255)); 
  31.     SetTextColor(hdc0,RGB(0,0,0)); 
  32.     BitBlt(hdc0,nX0,nY0,nW0,nH0,mDC,0,0,SRCAND); 
  33.  
  34.     // "或"运算,生成最终效果 
  35.     BitBlt(hdc0,nX0,nY0,nW0,nH0,hDC,0,0,SRCPAINT); 
  36.  
  37. // 清理、恢复  
  38.     SelectObject(hDC, oldBMP);               
  39.     DeleteDC(hDC); 
  40.     SelectObject(mDC, oldmBMP); 
  41.     DeleteDC(mDC); 
  42.     DeleteObject(hBMP); 
  43.     DeleteObject(mBMP); 

 

本文出自 “不曾远去” 博客,谢绝转载!

你可能感兴趣的:(游戏,职场,VC,休闲)