delphi下DrawText多行文本输出,英文有问题

问题:delphi下DrawText多行文本输出,英文有问题,显示不全,中文却没问题,怎么解决?

答:

(1)DT_WORDBREAK

只能截断单词。例如如果输入一连串英文字符,那么它会当做一个单词来处理,而不会自动换行。而对于中文字符则可以。如果要对所有字符都可以像Edit控件中那样自动换行,那么可以使用DT_WORDBREAK | DT_EDITCONTROL

DT_EDITCONTROL Duplicates the text-displaying characteristics of a multiline edit control. Specifically, the average character width is calculated in the same manner as for an edit control, and the function does not display a partially visible
last line.

(2)DT_CALRECT的使用

对于一段text,要计算他的显示大小,那么可以使用DT_CALRECT标志。其中的rect参数属于IN/OUT类型。输出时,左上角坐标不变,右下角坐标改变。函数返回值是文本的高度。当然,它要与不同格式标志一起使用得到的结果是不一样的。例如,DT_CALRECT | DT_SINGLELINE 时,它只扩展传入rect的width,而在多行显示的时候,即DT_WORDBREAK | DT_WORDBREAK | DT_EDITCONTROL,仅仅扩展height,width不变。

DT_CALCRECT   Determines the width and height of the rectangle. If there are multiple lines of text,
DrawText will use the width of the rectangle pointed to by lpRect and extend the base of the rectangle to bound the last line of text. If there is only one line of text,
DrawText will modify the right side of the rectangle so that it bounds the last character in the line. In either case,
DrawText returns the height of the formatted text, but does not draw the text.

(3)DT_CENTER 与 DT_VCENTER

DT_VCENTER只对单行文字的竖直居中有用。DT_CENTER 对单行和多行文字都有用,但只能水平居中。

(4)多行文字的竖直居中

思路:根据显示中心,重新计算要求的显示范围

具体方法:

// ======================================
// = 把str内容显示到客户区的中间,但是每行宽度限定为200,让其自动换行

CRect clientRect;
   GetClientRect(clientRect); // 获得客户区范围

CRect rect;
   rect.left = rect.top = 0;
   rect.right = 200;
   rect.bottom = clientRect.bottom;  // 限定宽度

   CString str = "我是来自非洲的姑娘。心中向往神秘的东方,背起行囊寻找梦想,那是龙的故乡
这里的人纯朴善良,淡淡微笑挂脸庞";

   CRect temp = rect;
   int height = pDC->DrawText(str,temp,DT_CENTER | DT_WORDBREAK | DT_CALCRECT | DT_EDITCONTROL); // 获得文本高度

   rect.DeflateRect(0,(rect.Height() - height) / 2); // 改变rect

   pDC->DrawText(str,rect, DT_CENTER | DT_EDITCONTROL | DT_WORDBREAK);

 

时间: 2024-09-21 00:26:02

delphi下DrawText多行文本输出,英文有问题的相关文章

Delphi下用Windows API创建窗体

// Delphi 下调用Windows API 创建窗体.// program delphi; uses windows, messages; const hellostr='Hello World!'; {$R delphi.res} //窗口消息处理函数. function MyWinProc(hWnd:THandle;uMsg:UINT;wParam,lParam:Cardinal):Cardinal;exp ort;stdcall; var hdca,hdcb:THandle; //设

Delphi下汉字输入法的编程及使用

许多Windows应用程序的中西文录入界面中,中西文的录入需要反复切换汉字输入法,这样使用起来非常麻烦,下面来介绍一种比较简便的解决方法.本文的程序设计环境为Delphi Client/Server Suit Ver 3.0(以下简称Delphi 3.0)和中文Windows 95. 1.Delphi下的Imename.Imemode属性 在Delphi 3.0中的Tedit.Tmemo.TmaskEdit等编辑元件在应用程序中经常使用,这三种元件都具有ImeName.ImeMode属性.其中I

032_《Delphi下用Intraweb开发WEB程序应用实战(第二版)》

<Delphi下用Intraweb开发WEB程序应用实战第二版> Delphi 教程 系列书籍 (032) <Delphi下用Intraweb开发WEB程序应用实战第二版> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作 者:高勇 内容简介 IntraWeb是Delphi自带的一套Web开发框架,它由Atozed Software公司(http://www.atozedsoftware.com)在2002年制作,并完美的植入Delphi7中.I

linux下相同输入产生不同输出

问题描述 linux下相同输入产生不同输出 在工作中有一个功能:根据文件a.b产生一个新文件c. a.c里都是整数数组,b是文本格式,具体流程可以理解为: 整数数组文件a + 文本文件b = 整数数组文件c. 按我们的流程,理论上整数数组里不应该有负数,但是现在生成的c中检查出了负数. 后来我们添加了一个脚本,当检查出c中有负数时,就把当时的a.b和可执行文件保存下来, 以备调试.当我们用出错情况时保存的a.b再执行时,产生的c却没有负数了. 不知道哪位碰到过这种情况. 我感觉和其中设置c的缓存

018_《Delphi下深入Windows核心编程》

<Delphi下深入Windows核心编程> Delphi 教程 系列书籍 (018) <Delphi下深入Windows核心编程> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Part1 Part2 Part3     书名: Delphi下深入Windows核心编程 作者: 飞思科技产品研发中心 出版社: 电子工业出版社 书号: 7505384023 出版日期:2003年1月 开本: 787*1092 1/16 页码: 525 版次: 2003年1

webbrowser-请问下vb.net中如何输出HtmlElement类型的数据

问题描述 请问下vb.net中如何输出HtmlElement类型的数据 For Each i As HtmlElement In web.Document.GetElementsByTagName("a") MessageBox.Show(i.ToString()) 我用这么一段代码,希望把WebBrowser中打开的网页中的内容赋值给变量i,之后在进行更进一步的处理,但是现在我想输出i,想看看到底赋值到底赋值的是什么(精加工一直出错)但是我利用ToString()输出的结果是i的类型

Delphi下OpenGL2d绘图之画线的方法_Delphi

一.前言: Delphi画线方法与画点基本上是相同的.区别在于glBegin()的参数.绘制的框架代码可以参考Delphi下OpenGL2d绘图初始化中的代码,地址为http://www.jb51.net/article/52141.htm.修改的部份为 Draw 函数的内容. 二.画线步骤: GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n条线段,总共绘制N/2条线段 GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个

Delphi下OpenGL2d绘图之画四边形的方法_Delphi

一.前言: Delphi实现画四边形的方法基本上与前几遍文字代码是相同的.其区别知识在于glBegin()的参数"GL_QUADS".绘制的框架代码可以使用Delphi下OpenGL2d绘图初始化中的代码,地址为http://www.jb51.net/article/52141.htm.修改的部份为 Draw 函数的内容. 二.画四边形方法: 使用GL_QUADS:绘制由四个顶点组成的一组单独的四边形.顶点4n-3.4n-2.4n-1和4n定义了第n个四边形.总共绘制N/4个四边形.这

Ubuntu 16.10 中文环境 Shell输出英文提示

/********************************************************************************** * Ubuntu 16.10 中文环境 Shell输出英文提示 * 说明: * 以前装系统总是装英文环境,问题是有些时候要操作中文就比较麻烦了,但装了中文 * 环境,编译提示又都是中文的,这更折腾人,所以查一下资料解决一下. * * 2017-2-27 深圳 南山平山村 曾剑锋 **************************