C++对话框背景透明处理的问题

crColour是位图中的透明色/
void CChessView::DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour)
{
 COLORREF crOldBack,crOldText;
 CDC dcImage,dcMask;
 CBitmap bmp;
 crOldBack=pDC->SetBkColor(RGB(255,255,255));//RGB(0,0,0)   隐形色
 crOldText=pDC->SetTextColor(RGB(0,0,0));//RGB(255,255,255)  
 //IDB_BITMAP4为待显示的位图
    BITMAP bm;
 bmp.GetBitmap(&bm);
 int nWidth=bm.bmWidth,nHeight=bm.bmHeight;
 //为图象及mask各创建一个DC
    dcImage.CreateCompatibleDC(pDC);
 dcMask.CreateCompatibleDC(pDC);
 //把图象装入imageDC
 CBitmap *pOldBitmapImage=dcImage.SelectObject(&bmp);
 //为“掩码”位图创建一个单色bitmap
 CBitmap bitmapMask;
 bitmapMask.CreateBitmap(nWidth,nHeight,1,1,NULL);//把mask位图装入maskDC
 CBitmap *pOldBitmapMask=dcMask.SelectObject(&bitmapMask);//用透明色创建“掩码”位图
     dcImage.SetBkColor(crColour);//crColour是位图中的透明色
 dcMask.BitBlt(0,0,nWidth,nHeight,&dcImage,0,0,SRCCOPY);//分3步进行实际的绘制
 pDC->BitBlt(x,y,nWidth,nHeight,&dcImage,0,0,SRCINVERT);
 pDC->BitBlt(x,y,nWidth,nHeight,&dcMask,0,0,SRCAND);
 pDC->BitBlt(x,y,nWidth,nHeight,&dcImage,0,0,SRCINVERT);//恢复原先设置
 dcImage.SelectObject(pOldBitmapImage);
 dcImage.SelectObject(pOldBitmapMask);
 pDC->SetBkColor(crOldBack);
 pDC->SetTextColor(crOldText);
}
//直接调用这个函数,CDC * pDC,我就不多介绍了,int x,int y是该位图的坐标,crColour是位图中的透明色。
 
转帖:http://zhidao.baidu.com/question/12378638.html?fr=qrl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值