文章目录
- windows编程之TextOut与DrawText -- 文本输出实验
- 实验名称
- 实验目的
- 实验要求
- 实验源码
- 思考题
windows编程之TextOut与DrawText – 文本输出实验
实验名称
- 实验3-2-文本输出实验
实验目的
-
1.掌握常用的文本输出函数TextOut、DrawText的使用,熟悉其参数设置。
-
2.掌握字体颜色、背景颜色、背景透明等属性的修改。
-
3.掌握字体创建函数CreateFont的使用,掌握计算文本大小的两种方法,进而能确定文本输出的合适位置
实验要求
1.在窗口处理函数中增加绘图代码,增加文本输出内容,分别使用TextOut
函数、DrawText
函数输出文本。使用DrawText
绘制的文本在矩形范围内居中显示,先将矩形绘制出来作为参照。注意函数中字符串输出长度、对齐参数的设置。效果参照课本
2.修改上题代码,将字体颜色、背景颜色分别修改,设置背景颜色透明,将两行字体重叠显示。参考效果如下:
3.创建新的字体,设置字体大小为30高,15宽,字体样式为隶书,计算合适位置输出多行文本,避免重叠。参考效果如下:
实验源码
先用vs创建一个Windows桌面应用程序,在消息处理的回调函数WM_PAINT
中修改代码
- 第1题
case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hWnd, &ps);// TODO: 在此处添加使用 hdc 的任何绘图代码...TCHAR str_t[100] = TEXT("使用TextOut输出文本");TCHAR str_d[100] = TEXT("使用DrawText输出文本");int len_t = wcslen(str_t);int len_d = wcslen(str_d);RECT rt = { 100,100,400,200 };TextOut(hdc, 10, 10, str_t, len_t);Rectangle(hdc, rt.left, rt.top, rt.right, rt.bottom);DrawText(hdc, str_d, -1, &rt, DT_CENTER | DT_SINGLELINE | DT_VCENTER);EndPaint(hWnd, &ps);return 0;}
- 第2题
case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hWnd, &ps);// TODO: 在此处添加使用 hdc 的任何绘图代码...TCHAR str1[100] = TEXT("红色字体颜色,绿色背景的文本");TCHAR str2[100] = TEXT("被掩盖的文本,背景透明");TCHAR str3[100] = TEXT("显示在前面的文本,背景透明");int len1 = wcslen(str1);int len2 = wcslen(str2);int len3 = wcslen(str3);SetTextColor(hdc, RGB(255, 0, 0));SetBkColor(hdc, RGB(0, 255, 0));TextOut(hdc, 20, 20, str1, len1);SetBkMode(hdc, TRANSPARENT);TextOut(hdc, 20, 60, str2, len2);TextOut(hdc, 20, 66, str3, len3);EndPaint(hWnd, &ps);return 0;}
- 第3题
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{HDC hdc;PAINTSTRUCT ps;TCHAR str[30] = TEXT("Hello 世界你好");int len = wcslen(str);static HFONT hFont;static TEXTMETRIC tm;SIZE size;switch (message){case WM_CREATE:hdc = GetDC(hWnd);hFont = CreateFont(30, 15, 0, 0, FW_BOLD, 0, 0, 0, GB2312_CHARSET, 0, 0, 0, 0, TEXT("隶书"));SelectObject(hdc, hFont);SetTextColor(hdc, RGB(255, 0, 0));GetTextMetrics(hdc, &tm);ReleaseDC(hWnd, hdc);return 0;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);TextOut(hdc, 20, 30, str, len);TextOut(hdc, 20, 30 + tm.tmExternalLeading, str, len);GetTextExtentPoint32(hdc, str, len, &size);TextOut(hdc, 20 + size.cx, 30, str, len);EndPaint(hWnd, &ps);return 0;case WM_DESTROY:DeleteObject(hFont);PostQuitMessage(0);return 0;}return DefWindowProc(hWnd, message, wParam, lParam);
}
思考题
设计三种(或n种)文本的样式(例如,1红色20号黑体;2黑色26号宋体;3蓝色30号隶属),将一串文本显示在屏幕上,通过鼠标点击次数切换三种不同字体效果。
enjoy it ~