pOldFont = pDC->SelectObject( &NewFont );
GetTextMetrics( pDC->m_hDC, &tm );
rect.left = nStart + tm.tmAveCharWidth * strlen( "P6V" );
rect.top  = m_rect.bottom + nToBottom + 2;
rect.right = rect.left + nWidth;
rect.bottom = rect.top + nHight - 2;
pDC->SetTextColor( P6VCOLOR );
pDC->TextOut( nStart, m_rect.bottom + nToBottom, "P6V" );
pDC->FillRect( rect, &CBrush( P6VCOLOR ) );上面是主要代码,我想要的效果是输出“P6V[]”后面的"[]"在实际绘图时是一个矩形,只是不好表示,我就用“[]”代替了。
但实际的输出效果是"P6[]",也就是在输出矩形时偏前了一点,把"V"给覆盖掉了。请问这是为什么?

解决方案 »

  1.   

    nStart = 50;
    tm.tmAveCharWidth = 6;
    rect.left = 68
    没看出什么问题。
      

  2.   

    rect.left = nStart + tm.tmAveCharWidth * strlen( "P6V" );
    改成:
    rect.left = nStart + tm.tmAveCharWidth * strlen( "P6V" )*2;
      

  3.   

    试过了还是一样,文字和矩形是同一颜色,所以两个输出应该不分先后的,都是混到一起了。如果我把rect.left多加20的话,能够很明显地看到“V"的。
      

  4.   

    你用这种方法计算的字符串长度不准确,用GetTextExtent函数可以计算字符串的输出长度。
      

  5.   

    GetTextMetrics求的一个字符的平均宽度,每个字符实际占的宽度是不一样的,该用pDC->GetTextExtent
      

  6.   

    Mackz正解,谢谢,也谢谢其他参与的朋友们。