DrawText()可以显示字符数组,由于设定的显示尺寸,导致只显示其中的部分,如何找到剩下的字符索引,以便可以继续显示下以页.

解决方案 »

  1.   

    有个api函数GetTextExtent,可以计算出一个字符串现实需要的尺寸。剩下的可以搞定了吧?
      

  2.   

    用GetTextMetrics得到文字的高度和宽度,
    算出每行能显示的字数
    然后每次只取一行能显示的字符给予显示
    直到到达最后
    这里简单给个SAMPLE CODE,哈,可能有点点问题的
    void myDrawText(HDC  hdc , HWND  hWnd)
    {
    RECT rcClient;
    ::GetClientRect (hWnd , &rcClient);
        memset(buf , 0  , sizeof(char)*1000 );
        memset(buf , 65 , sizeof(char)*1000 );
        TEXTMETRIC  txmet ;
    ::GetTextMetrics ( hdc , &txmet );
    int lineCount  = 0 ;
    lineCount = rcClient.right /txmet.tmMaxCharWidth ;
    int fontHeight  = txmet.tmHeight ; char *pbuf = new char[lineCount] ;// = buf ;

    char *pbuf2 = buf ;
    int  icount = 0;
     
    int ix = 0 ;
    int iy = 0 ; while(1)
    {
       memset(pbuf , 0 , sizeof(char)*lineCount );
       for(int i= 0 ; i< lineCount ; i++ )
       {
              icount++;
      if (icount == 1000)
      break;   pbuf[i] = *pbuf2;
      pbuf2++;    }    // draw text
       ::TextOut(hdc , ix ,iy, pbuf, strlen(pbuf));
       
       iy+= fontHeight ;
           if (icount == 1000)
       break; }
    delete[]  pbuf ;
    }