句柄:
- HFONT 字体句柄
数据结构:
- TEXTMETRIC 记录字体信息的数据结构
- Eg:【tm.tmHeight 字体高】【tm.tmExternalLeading 行间距】
- SIZE 记录字符串信息的数据结构
- Eg:【size.cx 横轴的长度】【size.cy 纵轴的长度】
定义字符串:
- char lpsz[] ="…"; 定义字符串
编程思路:
- 创建字体CreateFont(),设置颜色SetTextColor(),绑定画布;
- 获取字体信息GetTextMetrics(hdc,&tm);
- 格式化文本(通过字体高度和宽度确定后续x,y的位置);
- 输出文本TextOut()
重要函数:
hF = GetStockObject();
获得系统字体句柄,返回的是系统缺省字体
不写的话,相当于自动调用系统的字体
hF = CreateFont (
int nHeight, //字体高度,0采用系统缺省值,使用逻辑单位
int nWidth, //字体宽度,取0则由系统根据高宽比取最佳值
int nEscapement, //每行文字相对于页底的角度,单位为0.1度
int nOrienation, //每个文字相对于页底的角度,单位为0.1度
DWORD nWeight, //字体粗细度,范围为0~1000
DWORD Dwltalic, //如果要求字体倾斜,则取非零
DWORD dwUnderline, //如果要求下划线,则取非零
DWORD dwStrikeout, //如果要求中划线,则取非零
DWORD dwCharset, //字体所属字符集
DWORD dwOutputPrecision,//输出精度,一般取缺省值OUT_DEFAULT_PRECIS
DWORD dwClipPrecision, //剪裁精度,常取缺省值CLIP_DEFAULT_PRECIS
DWORD dwQuality, //输出质量,一般取缺省值DEFAULT_QUALITY
DWORD dwPitchAndFamily, //字体名
)
自己创建画笔
最后使用完毕,记得删除
DeleteObject(hF);
删除自己创建的画笔
SetTextColor(hDC, RGB(255, 255, 0));
设置文本颜色
参数:(设备, RGB颜色)
SetBkColor(hDC, RGB(255, 0, 0));
设置字体的背景颜色
SelectObject(hDC, hF);
将设备和字体句柄进行绑定
TextOut(hDC, x, y, lpsz_1, strlen(lpsz_1));
文本输出
参数:(设备, 坐标(X, Y), 字符数组名, 长度)
GetTextMetrics(hDC, &tm);
获取创建字体句柄的信息
字体有大小的,有时候X, Y的位置需要考虑字体的大小,将相关数据写在tm结构里面
GetTextExtentPoint(hDC, lpsz_3, strlen(lpsz_3), &size);
获得字符串的长宽,写入size的结构
x = x + size.cx;
y = y + tm.tmHeight + tm.tmExternalLeading;
换行,换起点
技巧1:
sprintf()
任意类型 —> 字符串
MessageBox()
窗口打印中间一些数据
Eg:(整型 --->字符串型,输出行间距)
char a[255]; //临时空间
sprintf(a, "%d", tm.tmExternalLeading); //转类型
MessageBox(hWnd, a, "111", strlen(a)); //“111”是窗体名字
技巧2:
主动建立计时器刷新:
WM_CREATE消息中,SetTimer(hWnd, 300, NULL); //300毫秒
WM_TIMER消息中, InvalidateRect(hWnd, NULL, 1);
WM_DESTROY消息中, KillTimer(hWnd, 1);
技巧3:
居中显示两种方法:
(i)通过计算的方式获得
int l = strlen(textbuffer[0]) * nXchar;
GetClientRect(hWnd, &rect);
TextOut(hDC, (rect.left+rect.right)/2 - l/2, (rect.top+rect.bottom)/2 - nYchar/2, textbuffer[0], Strlen(textbuffer[0]));
(ii)通过一些常量直接输出
GetClientRect(hWnd, &rect);
DrawText(hDC, textbuffer[0], -1, &rect, DT_SINGLELINE, DT_CENTER, DT_VCERTER);
DT_SINGLELINE:单行显示文本
DT_CENTER:水平居中
DT_VCERTER:垂直居中