Delphi WinAPI DrawText - 在指定的矩形中绘制格式化文本

Delphi WinAPI DrawText - 在指定的矩形中绘制格式化文本

DrawText函数在指定的矩形中绘制格式化文本。它根据指定的方法格式化文本(展开制表符、调整字符、换行等)。

原型:

int DrawText(
    HDC hDC,	//设备上下文句柄
    LPCTSTR lpString,	//指向要绘制的字符串的指针
    int nCount,	//字符串长度,以字符为单位
    LPRECT lpRect,	//指向具有格式化维度的结构的指针
    UINT uFormat 	//文本图形标志
   );

参数:

  • hDC   //标识设备上下文。
  • lpString   //指向要绘制的字符串。如果nCount参数为-1,则字符串必须以空结尾。
  • nCount  //指定字符串中的字符数。如果nCount为-1,则假定lpString参数是指向以null结尾的字符串的指针,DrawText会自动计算字符计数。
  • lpRect  //指向包含要格式化文本的矩形(逻辑坐标)的矩形结构。
  • uFormat  //指定格式化文本的方法。

关于 参数uFormat 它可以是以下值的任意组合:

  • DT_BOTTOM  //将文本对齐到矩形底部。该值仅与 DT_SINGLELINE 值一起使用。
  • DT_CALCRECT  //确定矩形的宽度和高度。如果有多行文本,DrawText将使用lpRect参数指向的矩形的宽度,并扩展矩形的底部以绑定最后一行文本。如果最大的单词比矩形宽,则宽度会扩大。如果文本小于矩形的宽度,则宽度将减小。如果只有一行文本,DrawText将修改矩形的右侧,以限制行中的最后一个字符。无论哪种情况,DrawText都返回格式化文本的高度,但不绘制文本。
  • DT_CENTER  //文本在矩形中水平居中。
  • DT_EDITCONTROL   //复制多行编辑控件的文本显示特性。具体而言,以与编辑控件相同的方式计算平均字符宽度,并且该函数不显示部分可见的最后一行。
  • DT_END_ELLIPSION (DT_END_ELLIPSIS)  //对于显示的文本,如果字符串的结尾不适合矩形,则会截断并添加省略号。如果一个不在字符串末尾的单词超出了矩形的限制,它将被截断而不带省略号。除非指定DT_MODIFYSTRING标志,否则不会修改字符串。注意比较 “DT_PATH_ELLIPSIS”和“DT_ WORD_ELLISIS”.
  • DT_EXPANDTABS  //展开制表符。每个选项卡的默认字符数为8。DT_WORD_Ellisis、DT_PATH_ELLIPSIS和DT_END_Ellicis值不能与DT_EXPANDTABS值一起使用。
  • DT_EXTERNALLEADING  //包括字体外部引入线高度。通常,文本行的高度不包括外部前导。
  • DT_HIDEPREFIX  //忽略文本中的符号和(&)前缀字符。后面的字母将不加下划线,但仍会处理其他助记符前缀字符。
  • DT_INTERNAL  //使用系统字体计算文本度量。
  • DT_LEFT  //将文本向左对齐。
  • DT_MODIFYSTRING  //修改指定的字符串以匹配显示的文本。除非指定DT_END_ELLIPSION或DT_PATH_ELliPSION,否则此值无效。
  • DT_NOCLIP  //绘制而不剪裁。使用DT_NOCLIP时,DrawText会稍微快一些。
  • DT_NOFULLWIDTHCHARBREAK  //防止DBCS(双宽字符串)处的换行,以便换行规则等效于SBCS字符串。例如,这可以在韩国窗口中使用,以提高图标标签的可读性。除非指定DT_WORDBREAK,否则此值无效。
  • DT_NOPREFIX  //关闭前缀字符的处理。通常,DrawText将助记符前缀字符&解释为一个指令,用于下划线后面的字符,将助记器前缀字符&&解释为一条指令,用于打印单个&。通过指定DT_NOPREFIX,
  • DT_PATH_ELLIPSION (DT_PATH_ELLIPSIS)  //对于显示的文本,将字符串中间的字符替换为椭圆,以便结果符合指定的矩形。如果字符串包含反斜杠(\\)字符,DT_PATH_ELLIPSION将尽可能保留最后一个反斜杠后的文本。
  • 除非指定DT_MODIFYSTRING标志,否则不会修改字符串。
  • DT_PREFIXONLY  //仅在与符号(&)前缀字符后面的字符位置绘制下划线。不在字符串中绘制任何其他字符。 Compare with DT_HIDEPREFIX and DT_NOPREFIX.
  • DT_RIGHT  //将文本向右对齐。 
  • DT_RTLREADING  //在hdc中选择的字体为希伯来文或阿拉伯文字体时,按从右到左的双向文本阅读顺序进行布局。所有文本的默认阅读顺序为从左到右。
  • DT_RTLREADING  //仅在单行上显示文本。回车和换行不会中断行。
  • DT_TABSTOP  //设置制表位。uFormat参数的第15-8位(低位字的高位字节)指定每个选项卡的字符数。每个选项卡的默认字符数为8。DT_CALCRECT、DT_EXTERNALLEADING、DT_ INTERNAL、DTUNOCLIP和DT_NOPREFIX值不能与DT_TABSTOP值一起使用。
  • DT_TOP  //将文本对齐到矩形顶部。
  • DT_VCENTER  //垂直居中文本。该值仅与DT_SINGLELINE值一起使用。
  • DT_WORDBREAK  //它打破了文字。如果一个单词将延伸超过lpRect参数指定的矩形边缘,则在单词之间自动断开行。回车换行顺序也会中断该行。如果未指定,则输出在一行上。
  • DT_WORD_ELLIPSION (DT_WORD_ELLIPSIS)  //截断不适合矩形的任何单词并添加省略号。 Compare with DT_END_ELLIPSIS and DT_PATH_ELLIPSIS.

注意:DT_CALCRECT、DT_EXTERNALLEADING、DT_ INTERNAL、DTUNOCLIP和DT_NOPREFIX值不能与DT_TABSTOP值一起使用。

返回值:  

  • 如果函数成功,返回值是以逻辑单位表示的文本高度。如果指定了DT_VCENTER或DT_BOTTOM,则返回值是从lpRect->top到绘制文本底部的偏移量
  • 如果函数失败,返回值为零。

Remarks:DrawText函数使用设备上下文选择的字体、文本颜色和背景颜色来绘制文本。除非使用DT_NOCLIP格式,否则DrawText将剪切文本,使其不会出现在指定矩形之外。除非指定DT_SINGLELINE格式,否则假设所有格式都有多行。

如果选定的字体对于指定的矩形太大,DrawText函数不会尝试替换较小的字体。

 

 

 

 

创建时间:2022.09.15  更新时间:2022.09.16

posted on 2022-09-15 15:16  滔Roy  阅读(404)  评论(0编辑  收藏  举报

导航