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函数。这可能会有帮助。我认为这是正确的想法,但代码有点混乱。你要做的是创建一个区域,这个区域是一个普通矩形和一个圆角矩形的交点。是的,这段代码直接来自于文档,并不意味着可以直接解决你遇到的问题。这只是通往成功之路上的一步。