当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: /* $id: sample1.cpp,v 1.6 1999/03/19 10:56:32 willy exp $ xbase project source code this program creates a sample database and four indexes copyright (c) 1997 startech, gary a. kunkel email - xba......
    摘要: 如题 要求:exe文件和当前窗体在同一目录下。 ......


GDI+画图问题

现在用GDI+画图  
  生成一个bitmap对象   用黑底红字书写   现在遇到字对齐问题  
  想输出如下内容  
   
  航班号                   始发站                   经停站                   起飞时间               变更时间               备注  
  FF3344                   寇寇                       他2                         09:50:43               10:50:30               延误  
  3333                       1111                       222                         09:50:43               10:50:30               延误  
  3333                       1111                       222                         09:50:43               10:50:30               AABB  
  2222                       2222                                                     10:31:56                                                                  
   
  在debug下查看输出如上面所示   但写到bitmap里发现第二行从第二列开始向后错大概半个字(不是汉字)的位置,到备注就向后面错了一个汉字的位置,第一行的第二个字段和第三个向后错了半个字,但从第四个字段往后都对齐了,其他行没什么问题。    
  请问是什么原因如何解决?谢谢!    
  这里无法贴图,我有个图片可以给大家看看   QQ联系:50963795  
  请高手赐教,谢谢!  
   
  代码如下  
                  Dim   g   As   Graphics  
                  Dim   align   As   New   StringFormat  
                  Dim   aPen   As   New   Pen(Color.Red,   1)  
                  Dim   aBrush   As   SolidBrush  
                  Dim   i   As   Integer  
   
                  b   =   New   Bitmap(500,   300,   PixelFormat.Format32bppRgb)  
                  g   =   Graphics.FromImage(b)  
                  g.Clear(Color.FromArgb(0,   0,   0))  
                  For   i   =   0   To   150   Step   10  
                          g.DrawLine(aPen,   i,   0,   i,   96)  
                  Next  
   
                  aBrush   =   New   SolidBrush(Color.Red)  
                  align.Alignment   =   StringAlignment.Near  
                  Dim   ft1   As   New   Font("宋体",   9)  
                  Dim   msg   As   String   =   "航班号                   始发站                   经停站                   起飞时间               变更时间               备注"  
                  g.DrawString(msg,   ft1,   Brushes.Red,   5,   12,   align)  
                  Debug.WriteLine(msg)  
                  msg   =   "FF3344                   寇寇                       他2                         09:50:43               10:50:30               延误"  
                  g.DrawString(msg,   ft1,   Brushes.Red,   5,   24,   align)  
                  Debug.WriteLine(msg)  
                  msg   =   "3333                       1111                       222                         09:50:43               10:50:30               延误"  
                  g.DrawString(msg,   ft1,   Brushes.Red,   5,   36,   align)  
                  Debug.WriteLine(msg)  
                  msg   =   "3333                       1111                       222                         09:50:43               10:50:30               AABB"  
                  g.DrawString(msg,   ft1,   Brushes.Red,   5,   48,   align)  
                  Debug.WriteLine(msg)  
   
                  msg   +=   ControlChars.CrLf  
                  Dim   size   As   SizeF   =   g.MeasureString(msg,   ft1)  
                  Dim   fontHeight   As   Integer   =   size.Height  
                  msg   =   "2222                       2222                                                     10:31:56                                                                 "  
                  Debug.WriteLine(msg)  
                  Dim   ft2   As   New   Font("宋体",   9)  
                  size   =   g.MeasureString(msg,   ft2)  
                  g.DrawString(msg,   ft2,   Brushes.Red,   5,   60,   align)  
                  Pict.Image   =   b  
                  Pict.Invalidate()  
 

NO.1   作者: Ninputer

宋体不是等宽字体,每个字符的宽度是不定的。所以对不齐是常有的事。建议你不要用"航班号                   始发站                   经停站                   起飞时间               变更时间               备注"这样的方式排版,而是使用绝对坐标定位,或者尝试使用tab符来分隔各个字段。

NO.2   作者: rzpc

嗯,正如楼上老大所说,可以使用   TAB定位符或绝对坐标的方法来解决。  
   
  基于你的代码,目前有一种十分方便的方法:只须把"宋体"改成"新宋体"  
  不过要注意的是:Windows98默认情况下没有“新宋体”。还有许多非中文版的操作系统也没有。


    摘要: 北京国电苏源信息技术有限公司,在南京江宁有一个分部,有准知道该公司怎么样?谢谢 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE