BOOL GdiplusUtilities::DrawTextOutline(Gdiplus::Graphics& graphics, LPCTSTR lpchText, int cchText, const Gdiplus::Rect& rc, const Gdiplus::StringFormat& format, const Gdiplus::Font& font, Gdiplus::Color fill, Gdiplus::Color outline, INT outlineWidth, BOOL bCalcOnly/* = FALSE*/, Gdiplus::Rect* rcCalc/* = NULL*/) { Gdiplus::FontFamily fontFamily; font.GetFamily(&fontFamily); Gdiplus::GraphicsPath path; path.AddString(lpchText, cchText, &fontFamily, font.GetStyle(), font.GetHeight(&graphics), rc, &format); if (rcCalc != NULL) { path.GetBounds(rcCalc); rcCalc->Inflate(outlineWidth, outlineWidth); } if (bCalcOnly) return TRUE; Gdiplus::Pen pen(outline, (Gdiplus::REAL) outlineWidth); if (graphics.DrawPath(&pen, &path) == Gdiplus::Ok) { Gdiplus::SolidBrush brush(fill); return graphics.FillPath(&brush, &path) == Gdiplus::Ok; } return FALSE; }
void Graphics::DrawRoundRectangle(Pen* pen, const RectF& rc, float d) { Gdiplus::Graphics* g = reinterpret_cast<Gdiplus::Graphics*>(_private); Gdiplus::Pen* gdiPen = reinterpret_cast<Gdiplus::Pen*>(pen->_private); Gdiplus::GraphicsPath gp; Gdiplus::RectF r(rc.GetLeft()-1.0f, rc.GetTop()-1.0f, rc.GetWidth(), rc.GetHeight()); gp.AddArc(r.X, r.Y, d, d, 180.0f, 90.0f); gp.AddArc(r.X + r.Width - d, r.Y, d, d, 270.0f, 90.0f); gp.AddArc(r.X + r.Width - d, r.Y + r.Height - d, d, d, 0.0f, 90.0f); gp.AddArc(r.X, r.Y + r.Height - d, d, d, 90.0f, 90.0f); gp.AddLine(r.X, r.Y + r.Height - d, r.X, r.Y + d / 2.0f); g->DrawPath(gdiPen, &gp); }
void Graphics::DrawPath(Pen* pen, GraphicsPath* path) { Gdiplus::Graphics* g = reinterpret_cast<Gdiplus::Graphics*>(_private); Gdiplus::Pen* gdiPen = reinterpret_cast<Gdiplus::Pen*>(pen->_private); Gdiplus::GraphicsPath* gdiPath = reinterpret_cast<Gdiplus::GraphicsPath*>(path->_private); g->DrawPath(gdiPen, gdiPath); }