【发布时间】:2019-12-24 23:32:33
【问题描述】:
我正在编写一些 C++ 代码来绘制椭圆。有时这些椭圆可以在一个分组中相互堆叠。当它们相互堆叠时,我希望椭圆的边界框是透明的,这样我就看不到边界框的白角。见下图。
是否包含SetBkMode 似乎并没有什么不同。如果我不执行FillRect,我会在边界框上看到黑色背景。
HBRUSH brush = CreateSolidBrush(RGB(255, 255, 255));
CDC *pDC = CDC::FromHandle(pSprite->hDCMem);
pDC->SetBkMode(TRANSPARENT);
pDC->FillRect(m_SpriteRect, CBrush::FromHandle(brush));
pDC->SelectObject(m_BackBrush);
pDC->Ellipse(m_SpriteRect);
pDC->SetBkMode(OPAQUE);
DeleteObject(brush);
有没有办法设置透明背景?
【问题讨论】:
-
只需删除
FillRect。看起来您正在使用内存 dc,因此根据您的操作可能会导致不同的问题。如果你是在制作精灵的话会有点复杂... -
@Barmak 如果我不使用 FillRect,边界框背景是黑色的。至少白色背景看起来更好。
-
显示代码的其余部分,您在最终 dc 上绘制内存 dc。尝试
TransparentBlt使用相同的颜色。 -
@Barmak - TransparentBlt 就是答案。如果您想将其发布为我的问题的答案,我会接受。