但现在有个问题是我用MeasureString计算每行能显示的字符个数的时候,文本内容不一样的时候,返回的个数是不一样的。
如果是纯汉字的,返回8,如果带了写数字或者标点符号的时候是5。而我需要根据这个数字去分段原始的文本,假设是后者的情况,如下图

看空间明明可以再显示字符的,可是被换行了。如果顺着这个现象,我似乎应该计算那些显示宽度比较窄的字符,把它们算做半个字符,这似乎也太麻烦了。不知道有什么方法可以简单的解决这个问题,或者能直接解决最原始的问题就更好了。
谢谢!
//
// 将文本分段显示,以控制行间距
//
const Gdiplus::SizeF layout_size(rect.Width, font.GetHeight(&graph));
Gdiplus::SizeF size;
std::wstring remain_text = text; // 当前剩余显示的文本
for (unsigned int i = 0; i < kMaxLineCount; ++i)
{
int char_count = 0; // 当前行能显示的字符个数
Gdiplus::Status status = graph.MeasureString(
remain_text.c_str(),
remain_text.length(),
&font,
layout_size,
&format,
&size,
&char_count,
NULL);
if (char_count > 0)
{
// 截取当前行可以显示的文本并显示
std::wstring substr = remain_text.substr(0, char_count);
Gdiplus::RectF subrc(rect.X, rect.Y + i * kLineHeight, layout_size.Width, layout_size.Height);
graph.DrawString(substr.c_str(), substr.length(), &font, subrc, &format, &brush);
// 更新剩余文本信息
remain_text.erase(0, char_count);
if (remain_text.empty())
break;
}
else
{
break;
}
}
因为GDIPlus不支持类似CDC::DrawText中DT_CALCRECT的功能。而MeasureString又只能计算单行文本所占的宽度,特意设计此函数。 /* 参数: lpRect,输入时用于指定位置和文本的最大宽度;输出时指定文本的矩形区域。 ...
Gdiplus::SolidBrush brush(Gdiplus::Color(124,25,28)); Gdiplus::RectF bound; SIZE sz; HDC hDC = gs.GetHDC(); SetTextCharacterExtra( hDC, 0 ); SetTextJustification( hDC, 0, 1 );
GDI 与 GDIPlus 获取文字宽度和高度的方法 /// GDI获得字体宽度的方法 CClientDC dc(this); CFont font; //Requested font height in tenths of a point. //For instance, pass 120 to request a 12...
在使用 Gdiplus 绘制文本时, 偶尔会遇到需要支持绘制格式化文本的时候,而 Gdiplus 在这方面并不好,没有官方提供支持的类,也不支持 HTML 标签和 CSS 的样式. 而大部分提供这类富文本的绘制目前我所知道的一种就是...
GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。 GDI+不但在功能上比GDI ...
加载库文件: #pragma comment(lib,"gdiplus.lib") //也可以在设置中添加 使用名字空间(可无): using namespace Gdiplus; 定义用到的两变量: GdiplusStartupInput m_gdiplusStartupInput;//gdi+版本信息...
主要是要将一个标题和几段文字绘制到固定大小的图片上,如果一张放不下就生成多张。在使用DrawString是发现无法控制行距 namespace TibetTest { public class Utils { // } public class ConvertImage { public ...
【GDI+】2048游戏 2048游戏在今年年初的时候风靡天下,作为一个程序员,在玩别人写的游戏的同时也想着用自己的方式来实现一下。由于只是做一个简单Demo,所以选择了MFC配合...- 1 游戏区域内随机出现分值为2或4...
前几天,一个朋友请求帮忙处理个LED图片生成问题,主要是要将一个标题和几段文字绘制到固定大小的图片上,如果一张放不下就生成多张。在使用DrawString是发现无法控制行距,请教了baidu大神找到了...
它负责在屏幕和打印机上显示信息。GDI+ 是一个应用程序编程接口,它是一个C++ 类。 如同它的名字暗示一样,GDI+ 是Windows 图形设备接口(GDI)的继承者, 这个图形设备接口包括早期的Windows版本。 Windows XP ...
GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负责在屏幕和打印机上绘制图形图像和显示信息。 GDI+不但在功能上比GDI...
为了方便大量的类似操作,自己动手写了一个简单的类,可实现对类似“控件”接近自动化的管理。 主要的想法如下: 1、实现对图片的自动管理,主要是销毁。 2、简化在对话框类中反复填写的代码工作量。 3、需要考虑...
Windows GDI 教程(一) 一个简单的绘图程序 http://www.tuicool.com/articles/jeMBZ3v 常见的图形编程库,除了 GDI 外还有 GDI+、OpenGL、DirectX等等,GDI 是其中最基础的一个库。所以 GDI 注定了不会有高级...
原文地址:http://blog.csdn.net/byxdaz/article/details/5972759
GDI+是Windows XP的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息。 它是一组通过C++类实现的应用程序编程接口。 GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。作为图形设备接口的GDI...
GDI+是Windows XP的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息。 它是一组通过C++类实现的应用程序编程接口。 GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。作为图形设备接口的...
DuiVision是参考了仿PC管家程序、金山界面库、DuiEngine、DuiLib等多个基于DirectUI的界面库开发的。 本文主要描述如何开发可以用于DuiVision界面库的界面控件,从而对DuiVision界面库进行扩展。
为什么80%的码农都做不了架构师?>>> ...
一个简单的GDI+例子。 简单绘制极坐标系,按类似的思路,可以画直角坐标系、对数直角系、外太空银河系…… 先把最后效果贴出来,觉得不需要的请按Alt+F4。 图中曲线是一个天线方向图,非常适合在极坐标下描绘。...
是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。作为图形设备接口的GDI+...
MFC CListCtrl 显示图片模式需要关联CImageList,并且增加背景图片(抓狂三天,比网上自绘完美) 头文件定义 CImageList* ListImages; CListCtrl *ListIcons; CPP 初始化列表 CRect rect; GetClientRect(&...
jdk1.8 64位官方正式版 jdk-8u91-windows
C#入门必看含有100个例字,每个例子都是针对C#的学习关键知识点设计的,是学习C#必须知道的一些程序例子,分享给大家,需要的可以下载
这本面试手册包含了Java基础、Java集合、JVM、Spring、Spring Boot、Spring Cloud、Mysql、Redis、RabbitMQ、Dubbo、Netty、分布式及架构设计等方面的技术点。内容难度参差,满足初中高级Java工程师的面试需求。
七夕节、情人节表白用的HTML源码(两款)
jd_seckill京东抢茅台插件最新版【京东飞天茅台1499抢购】Python脚本的完整安装+使用教程,这个很好用,稳定出单!
SecureCRT中文破解版欢迎大家下载,非最新版本!!!
Xshell-7.0个人免费版 ,供个人免费使用。 Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。除此之外,其还有丰富的外观配色方案以及样式选择。
C+Primer+Plus(第6版)中文版,不是扫描版,而是文字电子书,非常的高清,带目录
Microsoft office 2016专业增强版是一款由官方发布的Microsoft office办公软件,而且免费开放给所有Windows用户免费使用,其中Excel、word、PPT都非常智能化,界面最新加入暗黑主题,并且按钮的设计风格开始向Windows10靠拢。本平台提供Office 2016专业增强版,需要的朋友可下载试试! Office 2016 专业增强版安装教程 1. 下载