我在用DrawTextEx输出文本时,TAB是第一个字符或z文字中间时输出的宽度不一样,不知道是怎么回事。
已经设置style为DT_EXPANDTABS | DT_TABSTOP
DRAWTEXTPARAMS参数中的iTabLength设置为4
输出结果第一个是TAB的宽度是中间TAB的2倍
开发环境vs2005+win2003

解决方案 »

  1.   

    这个问题,俺以前抄的文本编辑器时,tab的宽度是自己计算的。
      

  2.   

    tab键的含义好像是下个网格的开始进行计算
    例如tab长度为8的话,那样不管是在1位置按tab还是5位置按tab,光标都是会出现在位置9的
    即下个mod(8)+1的位置
      

  3.   

    CPaintDC dc(this); // device context for painting
    TCHAR a[] = _T( "\t123\t12233汉字\t\t0" );

    DRAWTEXTPARAMS dp;
    dp.cbSize = sizeof( DRAWTEXTPARAMS );
    dp.iLeftMargin = 0;
    dp.iRightMargin = 0;
    dp.iTabLength = 4;
    dp.uiLengthDrawn = 0; RECT r;
    GetClientRect( &r );        LOGFONT lf;  
            ::ZeroMemory (&lf, sizeof (lf));  
            lf.lfHeight = 160;  
            lf.lfWeight = FW_NORMAL;  
            lf.lfEscapement = 0;  
            lf.lfOrientation = 0;  
            ::_tcscpy (lf.lfFaceName, _T ("宋体"));  
              
            CFont font;  
            font.CreatePointFontIndirect (&lf);          CFont* pOldFont = dc.SelectObject (&font);  
    ::DrawTextEx( dc.GetSafeHdc(), a, _tcslen( a ), &r, DT_LEFT | DT_WORDBREAK | DT_EXPANDTABS | DT_TABSTOP , &dp );
            //dc.TextOut( (int)xx, (int)yy, b );  
            dc.SelectObject (pOldFont);  
    //CDialog::OnPaint();俺试了一下,没问题了。