
最后的效果是如圖中繪制 4 個圓角
備注:與圓角矩形類似
uj5u.com熱心網友回復:
void CxxxxDlg::DrawRoundFrame(CDC *pDC, CRect &clip, int diameter,int lineLen)
{
// left up
pDC->MoveTo(clip.left+diameter/2+lineLen,clip.top);
CPoint startLu(clip.left+diameter/2,clip.top);
pDC->LineTo(startLu.x,startLu.y);
CPoint endLu(clip.left,clip.top+diameter/2);
CRect rcLu(clip.left,clip.top,
clip.left+diameter,clip.top+diameter);
// pDC->SetArcDirection(AD_COUNTERCLOCKWISE);
pDC->ArcTo(&rcLu,startLu,endLu);
pDC->LineTo(pDC->GetCurrentPosition().x,clip.left+diameter/2+lineLen);
// left down
pDC->MoveTo(clip.left,clip.bottom-diameter/2-lineLen);
CPoint startLd(clip.left,clip.bottom-diameter/2);
pDC->LineTo(startLd.x,startLd.y);
CPoint endLd(clip.left+diameter/2,clip.bottom);
CRect rcLd(clip.left,clip.bottom-diameter,
clip.left+diameter,clip.bottom);
pDC->ArcTo(&rcLd,startLd,endLd);
pDC->LineTo(pDC->GetCurrentPosition().x+lineLen,clip.bottom);
// right down
pDC->MoveTo(clip.right-diameter/2-lineLen,clip.bottom);
CPoint startRd(clip.right-diameter/2,clip.bottom);
pDC->LineTo(startRd.x,startRd.y);
CPoint endRd(clip.right,clip.bottom-diameter/2);
CRect rcRd(clip.right-diameter,clip.bottom-diameter,
clip.right+1,clip.bottom+1);
pDC->ArcTo(&rcRd,startRd,endRd);
pDC->LineTo(pDC->GetCurrentPosition().x,clip.bottom-diameter/2-lineLen);
// right up
pDC->MoveTo(clip.right,clip.top+diameter/2+lineLen);
CPoint startRu(clip.right,clip.top+diameter/2);
pDC->LineTo(startRu.x,startRu.y);// |
CPoint endRu(clip.right-diameter/2,clip.top);
CRect rcRu(clip.right-diameter,clip.top,
clip.right,clip.top+diameter);
pDC->ArcTo(&rcRu,startRu,endRu);
pDC->LineTo(pDC->GetCurrentPosition().x-lineLen,clip.top);
}
void CxxxxDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CClientDC dc(this);
CRect clip(100,100,300,300);
DrawRoundFrame(&dc, clip, 30,20);
}
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
直線和圓弧分別繪制轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/68656.html
標籤:圖形處理/算法
