拿来主义人员速达:

取一般的版式 TGPStringFormat 对象 使用可以达到精准定位显示效果:format.GenericTypographic()

MFC开发中需要自绘控件,使用Graphics绘文字时出现位置偏右偏下问题(显示效果如下)。版权原因,显示内容(空格+4个汉字)做模糊处理,望谅解。

深入学(bai)习(du)后发现参数传入影响定位及绘画,遂结合参数做如下测试。矩形绘制定位及大小数据类型原因,都会强制转化成整数,所以矩形位置大小不是特别准确,但是可以做效果演示。

实验序号 测试点 源码 显示效果
1 取一般的版式 TGPStringFormat 对象   //计算显示文字尺寸
  RectF boundingBox;
  g.MeasureString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top, rect.Width() - nX, rect.Height()), format.GenericTypographic(), &boundingBox);
  nY = (rect.Height() - boundingBox.Height) / 2;//顶部空白区域

g.DrawString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top + nY, rect.Width() - nX, rect.Height() - nY), format.GenericTypographic(), &brush);

Pen *blackPen = new Pen(color, 1);
  g.DrawRectangle(blackPen, Rect(rect.left + nX, rect.top + nY, boundingBox.Width, boundingBox.Height));

2   //计算显示文字尺寸
  RectF boundingBox;
  g.MeasureString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top, rect.Width() - nX, rect.Height()), format.GenericTypographic(), &boundingBox);
  nY = (rect.Height() - boundingBox.Height) / 2;//顶部空白区域

g.DrawString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top + nY, rect.Width() - nX, rect.Height() - nY), &format, &brush);

Pen *blackPen = new Pen(color, 1);
  g.DrawRectangle(blackPen, Rect(rect.left + nX, rect.top + nY, boundingBox.Width, boundingBox.Height));

3 直接赋值 //计算显示文字尺寸
  RectF boundingBox;
  g.MeasureString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top, rect.Width() - nX, rect.Height()), &format, &boundingBox);
  nY = (rect.Height() - boundingBox.Height) / 2;//顶部空白区域

g.DrawString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top + nY, rect.Width() - nX, rect.Height() - nY), &format, &brush);

Pen *blackPen = new Pen(color, 1);
  g.DrawRectangle(blackPen, Rect(rect.left + nX, rect.top + nY, boundingBox.Width, boundingBox.Height));

4   //计算显示文字尺寸
  RectF boundingBox;
  g.MeasureString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top, rect.Width() - nX, rect.Height()), &format, &boundingBox);
  nY = (rect.Height() - boundingBox.Height) / 2;//顶部空白区域

g.DrawString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top + nY, rect.Width() - nX, rect.Height() - nY), format.GenericTypographic(), &brush);

Pen *blackPen = new Pen(color, 1);
  g.DrawRectangle(blackPen, Rect(rect.left + nX, rect.top + nY, boundingBox.Width, boundingBox.Height));

format直接赋值,计算尺寸和画出来的文字上下左右都有空白部分,会导致文字定位出现偏移,视觉效果就是偏下和偏右。

取一般的版式 TGPStringFormat 对象 使用可以达到精准定位显示效果,最终使用代码如下:

//计算显示文字尺寸
RectF boundingBox;
g.MeasureString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top, rect.Width() - nX, rect.Height()), format.GenericTypographic(), &boundingBox);
nY = (rect.Height() - boundingBox.Height) / 2;//顶部空白区域g.DrawString(cap, cap.GetLength(), &font, RectF(rect.left + nX, rect.top + nY, rect.Width() - nX, rect.Height() - nY), format.GenericTypographic(), &brush);

显示效果如下,居中效果(主要是上下居中)是很好的:

GDI+ Graphics绘文字定位不准,显示偏差问题相关推荐

  1. 【GDI+】 线段 文字 定位的问题(二)

    继续: 经过上文的分析,似乎可以得到类似这样的想法: 由此 分为左右两侧进行区分绘制,应该就可以获得想要的结果了~ 转载于:https://www.cnblogs.com/loveclumsybaby ...

  2. CSS排版练习小作业,文字围绕图片显示,基本的float浮动定位

    简单的css排版 基本的float浮动定位 文字围绕图片显示 css代码,float分成两块 <style type="text/css">div.float1{flo ...

  3. GDI+简单现实文字旋转

    原文 http://www.cnblogs.com/kaixiangbb/p/3301272.html 题记 入职新公司已快有两月了,试用期已快结束,项目却迟迟还未正式启动.安排给我的多是些琐事,一直 ...

  4. GDI+ Graphics类

    1 GDI+的核心:Graphics类 (1)The Graphics class provides methods for drawing lines, curves, figures, image ...

  5. 【定位不准的烦心事系列】第1篇:谈谈卫星定位的位置干扰

    现代人的生活已经离不开手机,离不开地图,一旦遇到定位不准的问题,就会产生很多问题,而且有些会很严重,比如打车找不到车.外卖找不到顾客,更惨的是开车的时候在高速上转圈圈,多跑个100公里也是有可能的. ...

  6. 步进电机定位不准的原因及处理方法

    概述 步进电机是一种感应电机,它的工作原理是利用电子电路,将直流电变成分时供电的,多相时序控制电流,用这种电流为步进电机供电,步进电机才能正常工作,驱动器就是为步进电机分时供电的.虽然步进电机已被广泛 ...

  7. 百度地图web API定位不准,定位偏移问题处理

    百度地图浏览器API  获取GPS定位是根据调用浏览器核心获取GPS,部分手机型号定位不准,主要是因为部分手机采用的是GOOGLE  GPS坐标格式.部分手机用的是原生坐标格式 这两种格式百度地图无法 ...

  8. android 键盘 光标位置不对,鼠标定位不准的解决方法大全

    问题提出:脚本之家-电脑门诊-小网-NO.2388 说:站长您好: 请问您一个问题.网吧里是双飞燕的鼠标.但不能精确定位.鼠标的注册表也试过是要好一点.但还是不行...请问怎么解决啊? 先我们说下光电 ...

  9. Win10 系统替换 macOS 苹方字体 - 提升文字清晰度与显示渲染效果

    Win10 系统替换 macOS 苹方字体 前言 微软雅黑字体最早出现在 Windows Vista 时代,尽管它设计很经典,但由于当时并未充分考虑高分辨率屏幕的优化,如今在 4K 高清屏下字体显示效 ...

最新文章

  1. Linux常见命令(二)
  2. PHP 字符串与数组间的相互转化
  3. linux下安装nvm进行node的版本的快速切换
  4. 语言把数据写入csv文件_把JSON/CSV文件打造成MySQL数据库
  5. git 如何提取已提交的文件_git取两次提交的文件列表,包含目录信息
  6. JavaScript -- this 总结
  7. 关于Python的一些学习笔记(小白式笔记,持续更新)
  8. spring中的aware接口
  9. 搭建rtmp推流服务器
  10. 数据库系统概论第五版课后习题——第一章 绪论
  11. (没用,只是学习贴,可能永不会更新)Js 写《智慧树》自动评论脚本
  12. Spark项目实践--基于 TMDB 数据集的电影数据分析
  13. 附件二:攻防演练保密协议.docx
  14. WIN10 企业版 LTSC 激活
  15. 自考02324离散数学第二章思维导图
  16. java 流媒体点播_7个最佳的直播和点播健身流媒体平台
  17. 心形尺寸比例图解_标识牌尺寸大小及空间比例关系示意图与人体工程学
  18. 科技百咖 | 华途少帅谢永胜眼中的数据安全治理
  19. 多态的概念,特点和优缺点
  20. 梁宁:2019年是5G时代,也是革命性的新营销阵地

热门文章

  1. 从设计原则看网页字体之美
  2. iOS APP 逆向安全杂谈之二
  3. 你不可不知的任务调度神器-AirFlow
  4. 计算机无法访问计算机共享文件夹,教程分享:教您如何轻松解决计算机无法访问共享文件夹的问题!...
  5. webgl通过shader实现逼真水面
  6. 百度杀毒软件评测kuder13.4.26真实自己评测
  7. 什么软件可以测试网络的稳定性,网络稳定性测试软件
  8. java实时汇率的接口_汇率查询API接口_免费数据接口 - 极速数据
  9. Spring Boot配置Junit(单元测试)
  10. 认证和授权有什么区别?