vc 获取字符串宽度

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);

你可能感兴趣的:(gdiplus)