GetTextBounds函数定义:
SizeF GetTextBounds(const Font& font,const StringFormat& strFormat,const CString& szText)
{
USES_CONVERSION;
GraphicsPath path;
FontFamily fontfamily;
font.GetFamily(&fontfamily);
path.AddString(A2W(szText),wcslen(A2W(szText)),&fontfamily,
font.GetStyle(),font.GetSize(),PointF(0,0),&strFormat);
RectF rcBound;
path.GetBounds(&rcBound);
return SizeF(rcBound.Width,rcBound.Height);
}
使用示例:
#define ULONG_PTR unsigned long*
#include <GdiPlus.h>
#include <ATLCONV.h>
using namespace Gdiplus;
ULONG_PTR m_gdiplusToken;
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
pWnd = GetDlgItem(IDC_COMBO_SENDER);
CFont *cf = pWnd->GetFont();
LOGFONT lf;
cf->GetLogFont(&lf);
Font font(pWnd->GetDC()->GetSafeHdc(),&lf);
if (font.IsAvailable())
{
StringFormat stringFormat;
stringFormat.SetAlignment(StringAlignmentNear);
CString AccText;
pWnd->GetWindowText(AccText);
SizeF sizef = GetTextBounds(font,stringFormat,AccText);
pWnd->SetWindowPos(NULL, rectBt.right+23, y,
(int)sizef.Width + 24, rectBt.Height(), 0);
}
GdiplusShutdown(m_gdiplusToken);