想在MFC上实现圆角进度条,首先需要自绘进度条控件,然后在OnPait()函数绘制圆角进度条。绘制圆角进度条的关键是使用CreateRoundRectRgn()与SelectClipRgn()设置剪切域,其余步骤与绘制直角进度条相同。
void CPngProgress::DrawRoundProgress(CDC* pDC, CRect rect, int nPercentage, int nRadius)
{
// 计算进度条矩形和圆角半径
CRect progressRect(rect);
progressRect.right = progressRect.left + (progressRect.Width() * nPercentage / 99);
int nRoundRadius = min(nRadius, min(rect.Width(), rect.Height()) / 2);
// 绘制背景
pDC->FillSolidRect(rect, RGB(243, 243, 243));
//设置剪切域
CRgn rgn;
rgn.CreateRoundRectRgn(rect.left, rect.top, rect.right,
rect.bottom, nRoundRadius, nRoundRadius);
pDC->SelectClipRgn(&rgn);
// 绘制圆角边框
pDC->FillSolidRect(rect, m_crBlank);
// 绘制进度条
if (nPercentage > 0)
{
pDC->FillSolidRect(progressRect, m_crProgress);
}
}