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

来源:百度知道 编辑:UC知道 时间:2024/06/20 06:27:35
尝试编写一个像QQ宠物一样浮在桌面上的动画。在网上找了一些资料,透明处理后整个对话框包括控件和加载的位图都变成透明的的了。当背景完全透明后就什么也看不见了。问下,怎么样才能只让背景透明,加载的位图或其他控件不透明呢?尽量给出例子。
谢谢,不过我在实现透明的位图动画时,贴图总是不能完全刷新为新的画面,还保留有上张图的画面。不知道怎么才能实现透明位图的动画(连续的贴图)。我的部分代码:
BOOL CDlg3::OnInitDialog()
{
//初始化对话框,使用位图的蒙版,选择要擦除的颜色,用下面的方法创建位图形状的对话框。
CreateRectRgn();
CreateRectRgn();
CombineRgn();
SetWindowRgn((HRGN)rgnWnd,TRUE);
return TRUE;
}
BOOL CDlg3::OnEraseBkgnd(CDC* pDC) //用于对话框背景的擦除和贴图
{ ...........
return TRUE;
}
当我想用多张位图实现连续的贴图时,不知道该怎么做了,能指导下吗?

////////////////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步进行实际的绘制<