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

来源:互联网 发布:android ble 大数据 编辑:程序博客网 时间:2024/05/16 07:34


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




原创粉丝点击