DrawText格式化文本的一些格式

   DrawText输出文本不像TextOut(在指定坐标处输出文本),而是在某个矩形内输出文本
int DrawText(
HDC hDC, // 设备描述表句柄
LPCTSTR lpString, // 将要绘制的字符串
int nCount, // 字符串的长度(-1表示lpString是以'\0'结尾的,自动计算字符串字符个数)
LPRECT lpRect, // 指向矩形结构RECT的指针
UINT uFormat // 正文的绘制选项
);

最后一个参数是指定如何格式化文本的,比如左上对齐,中间对齐等…..
先输出一段文字:

case WM_PAINT:
        hdc = BeginPaint(hwnd,&ps);

        SetRect(&rc, 10, 10, 300, 200);
        FrameRect(hdc, &rc, (HBRUSH)GetStockObject(BLACK_BRUSH));

        DrawText(hdc, TEXT("God gives answers in three ways: He says yes and gives you what you want. He says no and gives you something better. He says wait and gives you the best"),
            -1, &rc, DT_LEFT);
            //DT_LEFT表示左对齐

        EndPaint(hwnd, &ps);
        return 0;

默认文本是左上对齐的,看图
DrawText格式化文本的一些格式_第1张图片

由于字符串过长,超过了的矩形,所以超过的内容会被“裁剪”,看不到矩形外的内容,可以包含DT_NOCLIP风格:

DrawText(hdc, TEXT("God gives answers in three ways: He says yes and gives you what you want. He says no and gives you something better. He says wait and gives you the best"),
            -1, &rc, DT_LEFT|DT_NOCLIP);

DrawText格式化文本的一些格式_第2张图片
这样就会看到矩形之外的内容了
可以加上DT_WORDBREAK,这样,如果矩形内一行无法容纳字符串,就会自动换行,在下一行显示,这样,DT_NOCLIP有没有也就无所谓了,这就是DT_WORDBREAK的作用
DrawText格式化文本的一些格式_第3张图片
还可以加上DT_EXPANDTABS标志,可以识别’\t’,否则只是输出一个特殊字符,
DrawText格式化文本的一些格式_第4张图片
DT_NOPREFIX标志,一开始也没搞清楚什么意思,后来搜到了,
<语>前缀; 人名前的称谓; 前置代号(置于前面的单词或字母、数字);

      prefix: <语>前缀; 人名前的称谓; 前置代号(置于前面的单词或字母、数字);

输出&和&&时:
DrawText格式化文本的一些格式_第5张图片
输出&会将后面一个字符加上下划线(),输出&&会显示为&,
如果加上DT_NOPREFIX
DrawText格式化文本的一些格式_第6张图片
就会关闭这种前缀处理

你可能感兴趣的:(windows程序设计之旅)