2009-12-16 116 views
0

我有一个圆角矩形,我做像这样填补了部分圆角矩形GDI +

dc.RoundRect(textBorder, CPoint(20, 20)); 

后来我画一条线通过它的方式约1/3下来。

dc.LineTo(textBorder.right, textBorder.top + 15); 

现在我想用纯色填充线条上方的部分。换句话说,我需要填充一个部分圆角的矩形,因为矩形的顶部是圆角的,但它的底部被线条截断。是否有捷径可寻?

回答

2

您是否尝试过使用CreateRoundRectRegion的组合然后FillRgn来填充非矩形区域?

这在文档中给出CreateRoundRectRegion的例子:

CRgn rgnA, rgnB, rgnC; 

VERIFY(rgnA.CreateRoundRectRgn(50, 50, 150, 150, 30, 30)); 
VERIFY(rgnB.CreateRoundRectRgn(200, 75, 250, 125, 50, 50)); 
VERIFY(rgnC.CreateRectRgn(0, 0, 50, 50)); 

int nCombineResult = rgnC.CombineRgn(&rgnA, &rgnB, RGN_OR); 
ASSERT(nCombineResult != ERROR && nCombineResult != NULLREGION); 

CBrush brA, brB, brC; 
VERIFY(brA.CreateSolidBrush(RGB(255, 0, 0))); 
VERIFY(pDC->FillRgn(&rgnA, &brA));  // rgnA Red Filled 

VERIFY(brB.CreateSolidBrush(RGB(0, 255, 0))); 
VERIFY(pDC->FillRgn(&rgnB, &brB));  // rgnB Green Filled 
VERIFY(brC.CreateSolidBrush(RGB(0, 0, 255))); // rgnC Blue 
VERIFY(pDC->FrameRgn(&rgnC, &brC, 2, 2)); 

一般情况下,当你想要做的,你必须开始寻找到区域的非矩形区域的东西。

+0

我还没有尝试过,但我没有看到如何解决我的问题。这不会在该区域的底部创建圆角边缘吗? – 2009-12-16 23:21:58

+0

现在你已经编辑了它,我看到有一个CombineRgn函数。这可能有帮助。 – 2009-12-16 23:25:22

+0

我认为这是正确的想法,但代码有点混乱。你想要做的就是创建一个区域,它是一个矩形与四舍五入矩形的交点。 – 2009-12-16 23:28:24