如果使用的字体为“新宋体”(中、英文均为“新宋体))(代码如下):
FontFamily CompFontFamily(L"新宋体");
Font cFont(&CompFontFamily, size, FontStyleRegular, UnitPixel);
PointF pt(xsRect[i].left, 0);
graph.DrawString(wstr, converted, &cFont, pt, &Brush);
此时显示的字体位置正确,紧靠图的最上方:
(最上面一条横线就是图的最上方的一条横线)
可是如果中文字体换成“微软雅黑”(此时英文字体仍然为”新宋体“),显示效果如下:
此时,英文由于仍然是“新宋体”,位置没有变化(但好象仍然没有显示在图的最上方,我觉得应该显示在最上方),而中文字体,却离最上方有四个像素之差。
这是怎么回事?为什么中文字体选“微软雅黑”的时候,显示位置不正确?而英文字体,即使是“新宋体”,显示位置也不正确(本来应该显示在最上方,和最上面一条横线相交)。而是都偏下了几个像素?
3 个解决方案
#1
两张图中,不管中文、英文,显示位置的纵坐标都是0,也就是说本来应该顶在最上面显示,但是两张图中,"di"两个英文字,都是“新宋体”,却没有顶在最上方。
而中文字体,上图是“新宋体”,确实顶在最上方显示了,但是下图的中文字体,是”微软雅黑“,明明显示的时候设的纵坐标是0,却离图片最上方有四个像素之差。
这是怎么回事?
而中文字体,上图是“新宋体”,确实顶在最上方显示了,但是下图的中文字体,是”微软雅黑“,明明显示的时候设的纵坐标是0,却离图片最上方有四个像素之差。
这是怎么回事?
#2
再看下图:本来设定那三个英文字母,显示的时候纵坐标是11,可是显示出来一看,字母的最上端的纵坐标是15,有四个像素之差。另外,字体大小为18,本来应该显示到11+18 = 29,可是却覆盖了下面那条绿线,那条绿线的纵坐标应该是31.
这是为什么?
这是为什么?
#3
忘了说了,上图的英文字体是Arial
#1
两张图中,不管中文、英文,显示位置的纵坐标都是0,也就是说本来应该顶在最上面显示,但是两张图中,"di"两个英文字,都是“新宋体”,却没有顶在最上方。
而中文字体,上图是“新宋体”,确实顶在最上方显示了,但是下图的中文字体,是”微软雅黑“,明明显示的时候设的纵坐标是0,却离图片最上方有四个像素之差。
这是怎么回事?
而中文字体,上图是“新宋体”,确实顶在最上方显示了,但是下图的中文字体,是”微软雅黑“,明明显示的时候设的纵坐标是0,却离图片最上方有四个像素之差。
这是怎么回事?
#2
再看下图:本来设定那三个英文字母,显示的时候纵坐标是11,可是显示出来一看,字母的最上端的纵坐标是15,有四个像素之差。另外,字体大小为18,本来应该显示到11+18 = 29,可是却覆盖了下面那条绿线,那条绿线的纵坐标应该是31.
这是为什么?
这是为什么?
#3
忘了说了,上图的英文字体是Arial