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;
由于字符串过长,超过了的矩形,所以超过的内容会被“裁剪”,看不到矩形外的内容,可以包含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);
这样就会看到矩形之外的内容了
可以加上DT_WORDBREAK,这样,如果矩形内一行无法容纳字符串,就会自动换行,在下一行显示,这样,DT_NOCLIP有没有也就无所谓了,这就是DT_WORDBREAK的作用
还可以加上DT_EXPANDTABS标志,可以识别’\t’,否则只是输出一个特殊字符,
DT_NOPREFIX标志,一开始也没搞清楚什么意思,后来搜到了,
<语>前缀; 人名前的称谓; 前置代号(置于前面的单词或字母、数字);
prefix: <语>前缀; 人名前的称谓; 前置代号(置于前面的单词或字母、数字);
输出&和&&时:
输出&会将后面一个字符加上下划线(),输出&&会显示为&,
如果加上DT_NOPREFIX
就会关闭这种前缀处理