关于CDC::DrawText()函数的妙用

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)。


你可能感兴趣的:(关于CDC::DrawText()函数的妙用)