我要用drawtext输出几行字符串时,发现字符对齐有问题.例如"B"就比"1"宽多了,10个'B'组成的一行比十个'1'组成的一行宽多了...有没有什么简便的方法可以解决这个问题???使得不同宽度组成的字符宽度也一样?

解决方案 »

  1.   

    BOOL CreateFont( 
                     int nHeight,           //字体的高度
                     int nWidth,            //字体的宽度
                     int nEscapement,       //字体显示的角度
                     int nOrientation,      //字体的角度
                     int nWeight,           //字体的磅数
                     BYTE bItalic,          //斜体字体
                     BYTE bUnderline,       //带下划线的字体
                     BYTE cStrikeOut,       //带删除线的字体
                     BYTE nCharSet,         //所需的字符集
                     BYTE nOutPrecision,    //输出的精度
                     BYTE nClipPrecision,   //裁减的精度 
                     BYTE nQuality,         //逻辑字体与输出设备的实际
                                            //字体之间的精度
                     BYTE nPitchAndFamily,  //字体间距和字体集
                     LPCTSTR lpszFacename   //字体名称
                   );
    是不是要用到这个参数呢?
    BYTE nPitchAndFamily,  //字体间距和字体集
    因为没有做过,只能给你提点见意了
      

  2.   

    不行的...
    CDC有一个成员函数也可以设置字体间距,但是很不幸.:(
      

  3.   

    1.你可以用ExtTextOut,这里的最后一个参数是调整字间距的,你设置等长的就可以了,你可以用这个办法去做。
    2.用DrawText的话得先知道Rect的大小,或者至少先知道要在多宽的地方显示文字,这样可以把Rect设置成这么宽,然后DrawText,再用SetTextJustification这个函数调整就可以了
      

  4.   

    如果你使用的不是等宽字体,可能需要自已定义一个固定宽度,然后一个字符一个字符写。
    SIZE size;
    int cx=10; //可为任一指定的宽度。
    TCHAR szBuffer[MAX_PATH]=...;//要显示的字符串。
    int i;
    //为简化程序,假设不含大于127的字符。如有中文需额外处理一下。
    int x,y;
    x=xLeft; //xLeft, yTop=文字的起始位置;
    y=yTop;
    for(i=0;i<lstrlen(szBuffer);i++)
    {
        GetTextExtentPoint32(hdc, &szBuffer[i], 1, &size);
        //每个字符在固定宽度内居中显示。
        TextOut(hdc, x+(cx-size.cx)/2,y, &szBuffer[i], 1);
        x+=cx;
    }
      

  5.   

    可以直接使用等宽字体:          SelectObject(hdc,GetStockObject(ANSI_FIXED_FONT));
              //DrawText(...)