MFC 根据字符宽度居中
Gdiplus::Font font(_T("微软雅黑"), (Gdiplus::REAL)130);
						Gdiplus::RectF orgin(0.0f, 100.0f, nWidth, 200.0f);
						Gdiplus::StringFormat stringformat;
						stringformat.SetAlignment(Gdiplus::StringAlignmentCenter);
						//stringformat.SetLineAlignment(Gdiplus::StringAlignmentCenter);
						Gdiplus::SolidBrush solidBrush(Gdiplus::Color(255, 255, 0, 0));
						graphics.DrawString(strFailedContent.c_str(), -1, &font, orgin, &stringformat, &solidBrush);
函数如下
float GetTextWidthFloor(const wstring& strText, const Gdiplus::Font& font)
{
	Gdiplus::StringFormat stringformat(Gdiplus::StringAlignmentNear);
	Gdiplus::GraphicsPath graphicsPathObj;
	Gdiplus::FontFamily fontfamily;
	font.GetFamily(&fontfamily);
	Gdiplus::RectF rcBound;
	graphicsPathObj.AddString(strText.c_str(), -1, &fontfamily, font.GetStyle(), font.GetSize(), Gdiplus::PointF(0, 0), &stringformat);
	graphicsPathObj.GetBounds(&rcBound);
	return (float)(rcBound.Width);
}
int GetTextWidth(const wstring& strText, const Gdiplus::Font& font)
{
	// calculate spaces width of text head
	// due to gdiplus do not care about it
	int nHeadSpace = 0;
	int nLen = strText.size();
	for (int i=0; i<nLen; ++i)
	{
		if (0x20 == strText.at(i))
			nHeadSpace++;
		else{
			break;
		}
	}
	// calculate space width
	static float fSpaceWidth = 0.0f;
	if ((fSpaceWidth >= -0.00001f && fSpaceWidth <= 0.00001f) && nHeadSpace > 0)
	{
		fSpaceWidth = GetTextWidthFloor(_T("a b"), font) - GetTextWidthFloor(_T("ab"), font);
	}
	float fResult = GetTextWidthFloor(strText, font) + (float)nHeadSpace * fSpaceWidth;
	return (int)fResult + 1;
}
 
                    
                
 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号