问题描述:
尝试编写一个像QQ宠物一样浮在桌面上的动画。在网上含禅找了一些资料,透明处理后整个对话框包括控件和加载的位图都变成透明的的了。当背景完全透明后就什么也看不见了。问下,怎么样才能只让背景透明,加载的位图或其他控件不透明呢?尽量给出例子。
解析:
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)
为“掩码”位图创建悄雀一个单 *** itmap
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是位图中的透明色。
先把需要透明的地方填充成某一颜色,然后用SetLayeredWindowAttributes函数指定要透明的颜色,这一块区域就郑简源被透明了如果要边框透明喊态掉,只需要把窗口的边框和标题栏去掉咐迹就可以了.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)