为什么用GDI+的DrawString,有的字体显示位置不正确?

screen12 2014-02-07 07:02:55
在一个窗口中用GDI+的DrawSting输入一些文字,发现位置始终不正确。始终找不到原因,最后干脆把纵坐标设为0,发现有的字体确实显示位置正确了,有的字体却仍然显示位置不正确。
如果使用的字体为“新宋体”(中、英文均为“新宋体))(代码如下):

FontFamily CompFontFamily(L"新宋体");
Font cFont(&CompFontFamily, size, FontStyleRegular, UnitPixel);
PointF pt(xsRect[i].left, 0);
graph.DrawString(wstr, converted, &cFont, pt, &Brush);

此时显示的字体位置正确,紧靠图的最上方:


(最上面一条横线就是图的最上方的一条横线)

可是如果中文字体换成“微软雅黑”(此时英文字体仍然为”新宋体“),显示效果如下:



此时,英文由于仍然是“新宋体”,位置没有变化(但好象仍然没有显示在图的最上方,我觉得应该显示在最上方),而中文字体,却离最上方有四个像素之差。

这是怎么回事?为什么中文字体选“微软雅黑”的时候,显示位置不正确?而英文字体,即使是“新宋体”,显示位置也不正确(本来应该显示在最上方,和最上面一条横线相交)。而是都偏下了几个像素?
...全文
382 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
screen12 2014-02-07
  • 打赏
  • 举报
回复
忘了说了,上图的英文字体是Arial
screen12 2014-02-07
  • 打赏
  • 举报
回复
再看下图:本来设定那三个英文字母,显示的时候纵坐标是11,可是显示出来一看,字母的最上端的纵坐标是15,有四个像素之差。另外,字体大小为18,本来应该显示到11+18 = 29,可是却覆盖了下面那条绿线,那条绿线的纵坐标应该是31.

这是为什么?

screen12 2014-02-07
  • 打赏
  • 举报
回复
两张图中,不管中文、英文,显示位置的纵坐标都是0,也就是说本来应该顶在最上面显示,但是两张图中,"di"两个英文字,都是“新宋体”,却没有顶在最上方。 而中文字体,上图是“新宋体”,确实顶在最上方显示了,但是下图的中文字体,是”微软雅黑“,明明显示的时候设的纵坐标是0,却离图片最上方有四个像素之差。 这是怎么回事?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧