背景
图形类 Graphics 是 GDI+的核心,它提供绘制图形、图像和文本的各种方法。Graphics 中使用 DrawString 方法在指定位置绘制文本或者在一个指定矩形内绘制文本。
通过调用 Graphics 对象的 MeasureString 方法,可以对文本的绘制区域进行计算。
计算文本所需矩形范围
void DemoGDI::DrawUser(HDC hdc)
{
Graphics graphics(hdc);//构造 Graphics 对象
SolidBrush solidBrush(Color::Blue);
Font font(L"宋体", 24, FontStyleRegular, UnitPixel);
QString m_txt = "在Qt中使用GD+示例";
graphics.DrawString(m_txt.toStdWString().c_str(), -1, &font, PointF(20, 20), nullptr, &solidBrush);
Pen m_pen(Color::Black);
RectF boundRect;
graphics.MeasureString(m_txt.toStdWString().c_str(), -1, &font, PointF(20, 20), &boundRect);
graphics.DrawRectangle(&m_pen, boundRect);
}
指定区域宽度计算所需高度
void DemoGDI::DrawUser(HDC hdc)
{
Graphics graphics(hdc);//构造 Graphics 对象
SolidBrush solidBrush(Color::Blue);
Font font(L"宋体", 24, FontStyleRegular, UnitPixel);
QString m_txt = "在Qt中使用GD+示例";
RectF layoutRect(20, 20, 90, 0);//高度设置为0
Pen m_pen(Color::Black);
RectF boundRect;
graphics.MeasureString(m_txt.toStdWString().c_str(), -1, &font, layoutRect, &boundRect);
graphics.DrawRectangle(&m_pen, boundRect);
graphics.DrawString(m_txt.toStdWString().c_str(), -1, &font, boundRect, nullptr, &solidBrush);
}
通过路径计算所需矩形范围
void DemoGDI::DrawUser(HDC hdc)
{
Graphics graphics(hdc);//构造 Graphics 对象
SolidBrush solidBrush(Color::Blue);
Font font(L"宋体", 24, FontStyleRegular, UnitPixel);
QString m_txt = "在Qt中使用GD+示例";
graphics.DrawString(m_txt.toStdWString().c_str(), -1, &font, PointF(20, 20), nullptr, &solidBrush);
Pen m_pen(Color::Black);
RectF boundRect;
Gdiplus::GraphicsPath graphicsPath;
FontFamily fontFamily(L"宋体");
graphicsPath.AddString(m_txt.toStdWString().c_str(), -1, &fontFamily, font.GetStyle(), font.GetSize(), PointF(20, 20), nullptr);
graphicsPath.GetBounds(&boundRect);
graphics.DrawRectangle(&m_pen, boundRect);
}