从rect到rgn的函数,圆角效果



void CmyQTab::getRgnFromRect(const CRect &rect, CRgn &rgn, int nHeightEllipse, int nWidthEllipse)
{
int nHeight = rect.bottom - rect.top;    // 计算高度
    int nWidth = rect.right - rect.left;        // 计算宽度

POINT point2[8] = {
{rect.left, rect.top+nHeightEllipse},                // left-left-top
{rect.left+nWidthEllipse, rect.top},                 // left-top-left
{rect.left+nWidth - nWidthEllipse, rect.top},
{rect.left+nWidth, rect.top+nHeightEllipse},        // right-top
{rect.left+nWidth, rect.top+nHeight - nHeightEllipse-1}, // right-bottom-right
{rect.left+nWidth - nWidthEllipse-1, rect.top+nHeight},  // right-bottom-bottom
{rect.left+nWidthEllipse+1, rect.top+nHeight},              // left-bottom
{rect.left,rect.top+ nHeight - nHeightEllipse-1}
    };


    rgn.CreatePolygonRgn(point2, 8, WINDING);

}



/////////////////////////////////////////////////////




void CmyQTab::DrawItem(CDC *pDC)
{
CRect rc;
GetClientRect(&rc);


CMemDC mdc(pDC,&rc);

mdc->FillRect(&rc,&CBrush(RGB(180,200,200)));
// 
// CRgn rgn;

// CDC m;
// m.CreateCompatibleDC(pDC);
// CBitmap bitmap;
// bitmap.LoadBitmap(IDB_BITMAP1);
// m.SelectObject(bitmap);
// ::TransparentBlt(mdc-> GetSafeHdc(),   0,   0,   100,   100,   
// m.GetSafeHdc(),   0,   0,   100,   100,   
// RGB(255,  255,   255)); 





// b.create


CRgn rgn;
rc.left++;
rc.right--;
rc.top++;
rc.bottom--;
rc.left++;
rc.right--;
rc.top++;
rc.bottom--;
getRgnFromRect(rc,rgn,2,2);


mdc->FillRgn(&rgn,&CBrush(RGB(20,20,20)));
//mdc->FillRect(rc,&CBrush(RGB(20,20,20)));


CBrush b;
CBitmap bp;
bp.LoadBitmap(IDB_BITMAP1);
b.CreatePatternBrush(&bp);
mdc->FillRgn(&rgn,&b);


b.DeleteObject();
bp.DeleteObject();
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值