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
博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你有所帮助,谢谢!