方法一:用XOR
ropOld = dc.SetROP2(R2_XORPEN);
pBrushOld=dc.SelectObject(&brushNew); // brushNew是矩形的颜色
dc.Rectangle(&rectTimeWnd); // RectTimeWnd是矩形的大小
dc.SelectObject(pBrushOld);
dc.SetROP2(ropOld);
方法二: (没有试过) 用Alpha通道
CDC memdc;
CBitmap bmp,*pOldBitmap;
memdc.CreateCompatibleDC(pDC);
bmp.CreateCompatibleBitmap(pDC,300,200);
pOldBitmap = memdc.SelectObject(&bmp);
memdc.FillSolidRect(0,0,300,200,RGB(0,0,255)); //蓝色
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = 0x7f; //半透明
bf.AlphaFormat = 0;
pDC->AlphaBlend(0,0,300,200,&memdc,0,0,300,200,bf);
memdc.SelectObject(pOldBitmap);
ropOld = dc.SetROP2(R2_XORPEN);
pBrushOld=dc.SelectObject(&brushNew); // brushNew是矩形的颜色
dc.Rectangle(&rectTimeWnd); // RectTimeWnd是矩形的大小
dc.SelectObject(pBrushOld);
dc.SetROP2(ropOld);
方法二: (没有试过) 用Alpha通道
CDC memdc;
CBitmap bmp,*pOldBitmap;
memdc.CreateCompatibleDC(pDC);
bmp.CreateCompatibleBitmap(pDC,300,200);
pOldBitmap = memdc.SelectObject(&bmp);
memdc.FillSolidRect(0,0,300,200,RGB(0,0,255)); //蓝色
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = 0x7f; //半透明
bf.AlphaFormat = 0;
pDC->AlphaBlend(0,0,300,200,&memdc,0,0,300,200,bf);
memdc.SelectObject(pOldBitmap);
本文介绍两种在绘图中实现透明效果的方法:一种是使用XOR操作来绘制矩形,另一种是通过Alpha通道创建半透明效果。后者涉及创建兼容的内存设备上下文和位图,填充指定颜色后与目标设备上下文进行Alpha混合。
1156

被折叠的 条评论
为什么被折叠?



