关于GDI+ DrawString有关问题

关于GDI+ DrawString问题
我想在一个矩形框内打印文字。当文字打印长度超过矩形长度时,只打印从后往前数的打印长度内的字符出来。
比如。
字符串
1234567890 矩形框的长度只能显示到12345678
现在需要打印出来的字符串是 34567890

StringFormat 有格式可以设置吗?

------解决方案--------------------
DT_RIGHT
------解决方案--------------------
DT_END_ELLIPSIS试试
------解决方案--------------------
引用:
我想在一个矩形框内打印文字。当文字打印长度超过矩形长度时,只打印从后往前数的打印长度内的字符出来。
比如。
字符串
1234567890 矩形框的长度只能显示到12345678
现在需要打印出来的字符串是 34567890

StringFormat 有格式可以设置吗?

你调用有问题,gdi+ 默认就是先打前面的,要先打后面的,要特别加一点小计算

看看启动坐标是否有问题DrawString的一个参数
------解决方案--------------------
GetTextExtentExPoint用这个函数可以计算举行区域内能显示多少个字,像你那样的可以先将字符串反转下,然后通过这个函数去获取下,然后再去除头几个字母进行显示。
------解决方案--------------------
RectF r
r的值设置的对么?
------解决方案--------------------
void MyDrawText(Graphics *pGDI, WCHAR* szText, PointF& pt, Font* pFont, 
  SolidBrush* pTextColor, BOOL IsGround, SolidBrush* pGroundColor, RectF &rc)
{
if(szText[0] == 0) return;

INT len = (INT)wcslen(szText);

int res = pGDI->MeasureString(szText, len, pFont, pt, &rc);
while(res != 0)
{
res = pGDI->MeasureString(szText, len, pFont, pt, &rc);
}
if(IsGround)
{
res = pGDI->FillRectangle(pGroundColor, rc);//gdi绘图失败重新绘
while(res != 0)
{
res = pGDI->FillRectangle(pGroundColor, rc);
}
}
res = pGDI->DrawString(szText, len, pFont, pt, pTextColor);
while(res != 0)
{
res = pGDI->DrawString(szText, len, pFont, pt, pTextColor);
}
}

RectF rc; // 背景区域
WCHAR szLineText[256]; // 打印行
wsprintfW(szLineText, L"文本1111111111111111");
PointF ptStar(0,0); // 启始点
g_MyCommon.MyDrawText(pGDIBmp/*gdi对像*/, szLineText/*文本*/, 
ptStar/*启始点*/, pFont/*字体*/, g_pColorText/*字体颜色*/, 
g_IsGround/*是否背景*/, g_pColorGround/*背景颜色*/, rc/*输出此文本背景区域*/);