posts - 10, comments - 1, trackbacks - 0, articles - 2

根据图片产生不规则形状窗口

Posted on 2008-08-30 20:43 Ben仔 阅读(616) 评论(0)  编辑 收藏 引用 所属分类: c++
//下面为根据指定的位图以及要去掉的颜色生成一个区域  
  HRGN   SetRgn(HBITMAP   hBitmap,COLORREF   clrKey)    
  {  
      CBitmap   bitmap   ;  
      bitmap.Attach(hBitmap)   ;  
      BITMAP   bitmapInfo   ;  
      bitmap.GetBitmap(&bitmapInfo)   ;  
      int   nRow   =   bitmapInfo.bmHeight   ;  
      int   nCol   =   bitmapInfo.bmWidth   ;  
       
      CDC   memDC   ;  
      memDC.CreateCompatibleDC(NULL)   ;  
      CBitmap*   pOldBitmap   =   memDC.SelectObject(&bitmap)   ;  
      CRgn   rgn   ;      
      rgn.CreateRectRgn(0,0,nCol,nRow)   ;  
      for(int   y   =   0;   y   <   nRow;   y++)  
      {  
                for(int   x   =   0;   x   <   nCol;   x++)  
                {  
      COLORREF   clrPixel   =   memDC.GetPixel(y,x)   ;  
      if(clrPixel   ==   clrKey)//去除关键色  
      {  
            CRgn   rgnTemp   ;  
            rgnTemp.CreateRectRgn(y,x,y+1,x+1)   ;  
            rgn.CombineRgn(pRgn,&rgnTemp,RGN_XOR)   ;  
            rgnTemp.DeleteObject()   ;  
      }  
                }  
        }  
        memDC.SelectObject(pOldBitmap)   ;  
        memDC.DeleteDC()   ;  
        bitmap.Detach()   ;  
        (HRGN)return   rgn.Detach()   ;  
  }  
   
  根据生成的区域设置窗口  
  void   SetWndRgn(HWND   hWnd,HBITMAP   hBitmap)  
  {    
        HRGN   hRgn   =   SetRgn(hBitmap,clrKey)//其中clrKey为要mask掉的颜色值  
        SetWindowRgn(hRgn)   ;  
        return   ;  
  }

网上找到1个代码例子 下载
另外1个方法是用 SetLayeredWindowAttributes 例子 下载

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理