C++ 用GDI+填充部分圆形矩形;

C++ 用GDI+填充部分圆形矩形;,c++,mfc,drawing,gdi+,C++,Mfc,Drawing,Gdi+,我有一个圆形的长方形,我是这样做的 dc.RoundRect(textBorder, CPoint(20, 20)); 后来,我画了一条线穿过它大约1/3的距离 dc.LineTo(textBorder.right, textBorder.top + 15); 现在我想用纯色填充线条上方的部分。换句话说,我需要填充一个部分圆角的矩形,因为矩形的顶部是圆角的,但底部被直线截断。有没有一个简单的方法可以做到这一点 您是否尝试过使用和的组合来填充非矩形区域 这是CreateRoundRectReg

我有一个圆形的长方形,我是这样做的

dc.RoundRect(textBorder, CPoint(20, 20));
后来,我画了一条线穿过它大约1/3的距离

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

现在我想用纯色填充线条上方的部分。换句话说,我需要填充一个部分圆角的矩形,因为矩形的顶部是圆角的,但底部被直线截断。有没有一个简单的方法可以做到这一点

您是否尝试过使用和的组合来填充非矩形区域

这是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 ));

一般来说,当你想用非矩形区域做一些事情时,你必须开始观察区域。

我没有尝试过,但我不知道如何解决我的问题。这不会在区域底部创建圆角吗?现在您已经编辑了它,我看到有一个CombineRgn函数。这可能会有帮助。我认为这是正确的想法,但代码有点混乱。你要做的是创建一个区域,这个区域是一个普通矩形和一个圆角矩形的交点。是的,这段代码直接来自于文档,并不意味着可以直接解决你遇到的问题。这只是通往成功之路上的一步。