代码之家  ›  专栏  ›  技术社区  ›  Bill Prin

用GDI填充部分圆角矩形+

  •  0
  • Bill Prin  · 技术社区  · 16 年前

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

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

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

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

    1 回复  |  直到 11 年前
        1
  •  2
  •   Richard    11 年前

    您是否尝试过使用以下组合: CreateRoundRectRegion 然后 FillRgn 要填充非矩形区域?

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

    一般来说,当您想要对非矩形区域执行某些操作时,您必须开始查看区域。