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

C++对话框背景透明处理的问题,第1张

分类: 电脑/网络 >>程序设计 >>其他编程语言

问题描述:

尝试编写一个像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函数指定要透明的颜色,这一块区域就郑简源被透明了

如果要边框透明喊态掉,只需要把窗口的边框和标题栏去掉咐迹就可以了.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12369389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存