Bootstrap

MFC:文本可视化输出


在MFC(Microsoft Foundation Classes)中,CDC(设备上下文类)提供了多种函数来输出文本。CDC类几乎封装了所有的Windows GDI(图形设备接口)函数,用于处理文本输出、处理字体等。

以下是一些常用的CDC中用于输出文本的函数及其描述:

1. DrawText:

这个函数用于在给定的矩形内格式化文本,并可以选择文本的对齐方式。它可以根据指定的格式类型(如左对齐、右对齐或居中)来断行以适应给定的矩形。

virtual int DrawText(
    LPCTSTR lpszString,  // 指向要绘制的文本的指针
    int     nCount,      // 字符串中的字符数
    LPRECT  lpRect,      // 指向矩形结构的指针
    UINT    nFormat      // 格式化选项
);

nFormat用来指定文本的对齐方式、换行方式、文本输出模式等。以下是一些常用的文本绘制格式选项:

  • 对齐方式:
    DT_CENTER:文本在矩形中水平居中。
    DT_LEFT:文本在矩形中左对齐。
    DT_RIGHT:文本在矩形中右对齐。
    DT_VCENTER:文本在矩形中垂直居中1。
    DT_TOP:文本在矩形顶部对齐(垂直方向)。
    DT_BOTTOM:文本在矩形底部对齐(垂直方向)。
  • 换行方式:
    DT_SINGLELINE:文本单行显示,不会换行。即使文本超出矩形宽度,也会被截断1。
    DT_WORDBREAK:在单词边界处换行。如果文本包含多个单词并且超出矩形宽度,则会在单词边界处断开并在下一行继续1。
    DT_WORDELLIPSIS:如果文本超出矩形,则在最后一个完整单词后添加省略号(…)。
    DT_PATH_ELLIPSIS:如果文本超出矩形,则在路径字符串的中间添加省略号(…)。
  • 文本输出模式:
    DT_CALCRECT:不绘制文本,但计算输出文本的矩形大小2。
    DT_EDITCONTROL:模拟编辑控件中的文本显示方式。
    DT_EXPANDTABS:将制表符(Tab)扩展为空格。
    DT_EXTERNALLEADING:在行之间添加额外的空间(仅对具有外部字体的文本有效)。
  • 其他选项:
    DT_NOPREFIX:忽略文本中的任何前缀字符(如&)。
    DT_END_ELLIPSIS:如果文本超出矩形,则在文本的末尾添加省略号(…)。
    DT_MODIFYSTRING:修改传入的文本字符串以适合矩形(通常与DT_END_ELLIPSIS或DT_PATH_ELLIPSIS一起使用)。
    请注意,这些选项可以通过按位或(OR)运算符组合使用,以在DrawText函数中指定多个选项。例如,DT_CENTER | DT_VCENTER将文本在矩形中水平和垂直居中

2. TextOut:

这个函数用于在给定的位置输出一个文本字符串。

BOOL TextOut(
    int x,               // 文本起点的x坐标
    int y,               // 文本起点的y坐标
    LPCTSTR lpszString,  // 指向要绘制的文本的指针
    int nCount           // 字符串中的字符数
);

注意:在MFC中,通常不需要指定nCount,因为字符串通常是以null终止的。

在MFC(Microsoft Foundation Classes)中,DrawTextA是DrawText函数的ANSI版本。当处理ANSI(American National Standards Institute,美国国家标准协会)字符串时,应该使用DrawTextA;而处理Unicode字符串时,应该使用DrawTextW。但在大多数情况下,由于MFC和Windows API的Unicode支持,开发人员会直接使用DrawText,它会自动映射到相应的Unicode或ANSI版本,具体取决于项目的字符集设置

3. SetTextColor:

这个函数用于设置文本的颜色34。

COLORREF SetTextColor(
    COLORREF crColor   // 新的文本颜色
);

4. SetBkColor:

这个函数用于设置文本的背景颜色(虽然DrawText函数本身并不直接设置背景色,但CDC类有这个函数)。

COLORREF SetBkColor(
    COLORREF crColor   // 新的背景颜色
);

5. GetTextMetrics:

这个函数用于获取当前字体的度量信息,例如字符的平均高度等,这在确定文本输出的位置时非常有用。

BOOL GetTextMetrics(
    LPTEXTMETRIC lptm   // 指向TEXTMETRIC结构的指针
);

在使用这些函数时,通常会先设置文本的颜色、字体等属性,然后调用输出函数在指定的位置绘制文本。完成文本绘制后,如果更改了字体或其他资源,建议恢复到原始设置以避免资源泄露或意外的视觉效果。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;