19,469
社区成员
发帖
与我相关
我的任务
分享
//
// 将文本分段显示,以控制行间距
//
const Gdiplus::SizeF layout_size(rect.Width, font.GetHeight(&graph));
Gdiplus::SizeF size;
std::wstring remain_text = text; // 当前剩余显示的文本
for (unsigned int i = 0; i < kMaxLineCount; ++i)
{
int char_count = 0; // 当前行能显示的字符个数
Gdiplus::Status status = graph.MeasureString(
remain_text.c_str(),
remain_text.length(),
&font,
layout_size,
&format,
&size,
&char_count,
NULL);
if (char_count > 0)
{
// 截取当前行可以显示的文本并显示
std::wstring substr = remain_text.substr(0, char_count);
Gdiplus::RectF subrc(rect.X, rect.Y + i * kLineHeight, layout_size.Width, layout_size.Height);
graph.DrawString(substr.c_str(), substr.length(), &font, subrc, &format, &brush);
// 更新剩余文本信息
remain_text.erase(0, char_count);
if (remain_text.empty())
break;
}
else
{
break;
}
}