弧形文本的绘制跟正常文本绘制有不同的地方是弧形文本需要根据弧度范围内一个一个字符的绘制。
代码如下:
//先计算弧形分块
SStringW sstrContent = L"1234567890A";
int nWords = sstrContent.GetLength();
double dStepAngle = 180.0 / (nWords + 1);
//指定弧形的圆心,此处以绘制文本区域的下边的中点为圆心
CRect rcWindow = GetClientRect();
CPoint ptOrg = rcWindow.CenterPoint();
ptOrg.y = rcWindow.bottom;
for (int i = 0; i < nWords; i++)
{
double dAngle = i * dStepAngle + dStepAngle;
SStringW sstrWord = sstrContent.GetAt(i);
SMatrix matrix;
matrix.setRotate(dAngle + 270, ptOrg.x, ptOrg.y); //此处按角度是以90度的方向开始,就给加了270度
pRT->SetTransform(matrix.fMat, NULL);
pRT->DrawText(sstrWord, 1, rcWindow, DT_SINGLELINE | DT_CENTER | DT_TOP);
pRT->SetTransform(SMatrix().fMat);
}
效果如下:

11万+

被折叠的 条评论
为什么被折叠?



