GDI+ 文本测量方法
背景
图形类 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);//高度设置为0Pen 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);
}