CDC::DrawText 这个函数是在某个位置按某个格式输出一个文本。它有两个格式:如下
virtual int DrawText(LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat);
int DrawText(const CString& str, LPRECT lpRect, UNIT nFormat);
返回值:如果成功,则返回文本高度。
参数:
lpszString | 指向要绘制的文本的指针。如果nCount是-1,该字符串必须是空终止的。 |
nCount | 字符串中字符数目。如果为-1,lpszString被认为是一个指向空终止的字符串的长指针。DrawText自动计算字符数目。 |
lpRect | 指向RECT结构或CRect对象的指针,结构(或对象)中包含有矩形(逻辑单位表示),其中的文本带有格式。 |
str | 含有要被绘制的文本的CString对象。 |
nFormat | 指定格式化文本的方法。它可以是下列值的组合(可用运算符或位操作符进行组合):
DT_BOTTOM | 底部对齐的文本。该值必须同DT_SINGLELINE组合使用。 | DT_CALCRECT | 决定矩形的宽度和高度,如果是多行文字,DrawText将会使用lpRect指向的矩形,并扩展矩形以容纳文本。如果是单行文本,DrawText将会调整矩形的右边以便容纳该行文字。两种情况下,DrawText都返回格式化文本的高度,但并不绘制它们。 | DT_CENTER | 将文本水平居中。 | DT_END_ELLIPSIS或DT_PATH_ELLIPSIS | 如果必要,将用椭圆替代部分指定的文本,以便适合给定的矩形。除非指定DT_MODIFYSTRING 标志,否则给定的字符串不会被修改。可以指定DT_END_ELLIPSIS在字符串末端替代字符,或者指定DT_PATH_ELLIPSIS在字符串中间替代字符。如果字符串中含有反斜杠(/),DT_PATH_ELLIPSIS将尽可能保存在最后一个反斜杠后的文本。 | DT_EXPANDTABS | 扩展制表符,每一制表符所含字符的缺省数目是8。 | DT_EXTERNALLEADING | 包括在行高中的字体外部间隔。通常外部间隔不包括在一行文本的高度之中。 | DT_LEFT | 文本左对齐。 | DT_MODIFYSTRING | 修正给定字符串以便与显示文本匹配。只有在指定了DT_END_ELLIPSIS 或DT_PATH_ELLIPSIS 标志时,该标志才起作用。 注意:某些uFormat标志组合能导致传递的字符串受到修改。DT_MODIFYSTRING同DT_END_ELLIPSIS 或DT_PATH_ELLIPSIS 一起使用会导致字符串修改,导致在CString覆盖中插入断言。 | DT_NOCLIP | 绘制但不剪切, DrawText在使用DT_NOCLIP后总能运行得快一些。 | DT_NOPREFIX | 关闭前缀字符,通常DrawText将助记前缀&理解为其后字符加上下划线,&&前缀符表示显示一个&字符,指定DT_NOPREFIX后,也关闭了这种处理。 | DT_PATH_ELLIPSIS | DT_RIGHT | 文本右对齐。 | DT_SINGLELING | 指定单行,回车与换行不会中断该行。 | DT_TABSTOP | 设置制表位,nFormat的高位字节即为每一制表符所含字符的数目,缺省值为8。 | |
说明:
在给定的矩形内调用该成员函数格式化文本。通过将制表值扩展到适当大小,使文本在给定矩形内左对齐、右对齐或居中,使文本断成多行以适应给定矩形来格式化文本,格式类型由nFormat指定。
该成员函数适应设备上下文中选取的字体、文本颜色、背景色来显示文本。在采用DT_NOCLIP格式时,DrawText剪切不会使文本显示超过矩形范围,除非选择DT_SINGLELINE格式,所有格式都认为适用于多行文本。
如果所选字体相对于矩形范围过大,DrawText成员函数并不用较小的字体来代替。
在这个有格式是DT_CALCRECT,如果指定了DT_CALCRECT标志,由lpRect 指定的矩形将会更新,以反映显示文本需要的高度和宽度。这样就可以很容易地获取刚好容纳文本的矩形大小。但是也有一点就是它并不去绘制文本,所以在你设定这个格式进行输出时并不能看到文本,如果想看到文本,必须再次调用该函数绘制一遍(不要再把nFormat设置成DT_CALCRECT)。