代码来自GDIPlus::DrawString计算一定区域显示字符个数的问题-CSDN社区

直接复制到初始化GDI+代码后面就行,这是个内嵌的方法:

直接代码:

auto fun_tradeno = [](wstring tmp) {
            Gdiplus::Bitmap* img;
            tmp = L"订单号:" + tmp;

//设置字体大小,
            int fontsize = 20;
            FontFamily fontFamily(L"Arial");
            Font font(&fontFamily, fontsize - 6, FontStyleBold, UnitPoint);
            
            float a= font.GetHeight(20);
            float b=font.GetUnit();
            设置总高度
            float height = ((float)tmp.length()*  fontsize ) / (float)200;
            int int_h = height; //float
            if (int_h < height) {
                int_h++;
            }
            RectF rectF(0.0f, 0.0f, 200.0f, int_h*fontsize);
            img = new Gdiplus::Bitmap(200, int_h* fontsize); 
            SolidBrush solidBrush(Color(0, 0, 0));
            Graphics graphics(img);
            //graphics.MeasureCharacterRanges(tmp.data(), -1, &font, rectF, NULL,1, &solidBrush);
            
                        //设置居中
            StringFormat stringFormat;
            // Center-justify each line of text.
            stringFormat.SetAlignment(StringAlignmentNear);
            // Center the block of text (top to bottom) in the rectangle.
            stringFormat.SetLineAlignment(StringAlignmentNear);

const Gdiplus::SizeF layout_size(rectF.Width, font.GetHeight(&graphics));
            Gdiplus::SizeF size;
            int kMaxLineCount = tmp.length();
            int kLineHeight = fontsize;
            std::wstring remain_text = tmp; 
             for (unsigned int i = 0; i < kMaxLineCount; ++i) {
                int char_count = 0; // 当前行能显示的字符个数

Gdiplus::Status status = graphics.MeasureString(
                    remain_text.c_str(),
                    remain_text.length(),
                    &font,
                    layout_size,
                    &stringFormat,
                    &size,
                    &char_count,
                    NULL);

if (char_count > 0) {
                    // 截取当前行可以显示的文本并显示
                    std::wstring substr = remain_text.substr(0, char_count);
                    Gdiplus::RectF subrc(rectF.X, rectF.Y + i * kLineHeight, layout_size.Width, layout_size.Height);
                    graphics.DrawString(substr.c_str(), substr.length(), &font, subrc, &stringFormat, &solidBrush);

// 更新剩余文本信息
                    remain_text.erase(0, char_count);

if (remain_text.empty())
                        break;
                } else {
                    break;
                }
            }

// graphics.DrawString(tmp.data(), -1, &font, rectF, NULL, &solidBrush);
            
           // graphics.DrawString(L"订单号:", -1, &font, rectF, NULL, &solidBrush);
            return img;
        };

GDI+的DrawString多行、换行,自动换行相关推荐

  1. css如何让不自动换行,css实现强制不换行/自动换行/强制换行

    在我们日常的编码中经常会遇到这段文字不可以换行,或者自动换行的需求.虽然这个功能在我们平时很常见但是我相信大家一定不会可以的去记住它吧(至少♦ 嘻嘻...).今天我们来学习一下如何熟练的掌握用css实 ...

  2. python隔行_python多行换行

    广告关闭 提供包括云服务器,云数据库在内的50+款云计算产品.打造一站式的云产品试用服务,助力开发者和企业零门槛上云. 用反斜杠链接多行代码,示例输出:55a=22+33printa2. 用小括号括起 ...

  3. GridView标题行换行之我见 (转)

    GridView标题行换行之我见 (转) 1.不换行: word-break:keep-all;word-wrap:normal 2.换行: word-break:break-all;word-wra ...

  4. laravel文字+链接(英文字符)--多行换行处理

    laravel框架中:一个模块中,有一些文字,文字中可能包含超链接,要让超链接正常显示,且让中文后紧跟英文,英文也换行显示: 1.HTML相关处理 前端从后端获取到的超链接数据形式 是 HTML实体, ...

  5. 关于css多行换行省略和第二行起缩进

    css多行换行省略: padding-left: pxToRem(10);text-indent: pxToRem(-8);overflow: hidden;text-overflow: ellips ...

  6. css实现多行换行,并自动在后面加省略号

    css有换行的标签,但是只能实现单行换行,使用起来很不方便.以下代码可以实现多行换行,并且后面自动加省略号,但是在使用之前需要给它一个固定的宽度,把下面的代码直接复制过去就可以了. <!DOCT ...

  7. delphi memo 行数 自动换行_大咖分享办公秘籍:Word和Excel换行

    我们在日常办公和学习中,对文档进行整理和粘贴数据的过程中,经常会用到的就是换行功能了.那么怎么实现自动换行呢?下面,就由非凡学院商务办公培训专业的付老师,和大家分享一下在Word和Excel中简单的实 ...

  8. java drawstring 多行,GDI+ 中如何DrawString多行文本?

    1.只能根据坐标,调整成两行了. http://www.cnblogs.com/winzheng/archive/2009/03/05/1403992.html [object Object]Code ...

  9. css实现强制不换行/自动换行/强制换行---转帖,致谢王维刚

    210.21.226.* 1楼 强制不换行 div{ white-space:nowrap; } 自动换行 div{  word-wrap: break-word;  word-break: norm ...

最新文章

  1. 是什么专业_聚焦专业:什么是好专业?考古专业明年会成为热门吗?
  2. 几个关于财报的基本知识
  3. 安卓自定义时间选择器_微信小程序拾色器(颜色选择器)组件
  4. 智伴机器人三级分销模式_有赞三级分销?有赞分销模式怎
  5. 百度押注AI有了大回报,李彦宏首次披露Apollo如何赚钱
  6. WebDriver API 实例详解(二)
  7. Git ---- 解决coding:Permission denied(publickey)
  8. 有对象的程序猿都是怎么写代码的
  9. flex实现三栏布局
  10. 我们整理了20个Python项目,送给正在求职的你
  11. 开源一个 Python 算法和数据结构中文教程
  12. linux下多点电容触摸屏实验
  13. C++11版本后的一写新语法及使用方法for、vector、map
  14. Kafka高性能之页缓存(page cache)使用
  15. python适合什么发型-下面不属于python特性的是( )。
  16. Web渗透(九)LDAP注入
  17. 华芯微特SWM320TFT屏人机交互方案手册
  18. IMP706芯片使用介绍
  19. Prometheus-----2
  20. 姚博文 Script中defer的作用

热门文章

  1. 使用 python requests 模块发送 http 请求及接收响应
  2. 多多客api_多多进宝API功能更新公告
  3. numpy -- 基础方法操作 array和asarray数据类型常用基础方法
  4. 电大计算机网考成绩,电大计算机网考Excel学科成绩上的应用
  5. 用 Python 爬了微信好友,原来他们是这样的人...
  6. 使用xshell向服务器上传大文件(大于4G)的方法
  7. 测试学习(三)——用例编写
  8. 禁用Chrome缓存
  9. 没有“熊猫“的熊猫快餐,凭什么能成为中式快餐第一?
  10. 去除面部黑色素小妙招_淡化脸上黑色素方法 几个简单小方法教你轻松白回来...