<第五章 文本编程>第一个例子
创建一个单文档应用程序
<需求实现>创建一个文本插入符(光标)
需求：
创建一个文本插入符(光标)
<需求实现>使文本插入符的大小与当前文本信息匹配
需求：
使文本插入符的大小与当前文本信息匹配
实现：
通过设备描述表获取当前字体信息
<需求实现>创建图形插入符
需求：
创建图形插入符
实现：
新建一个位图
<需求实现>在窗口上输出一段文字
需求：
在窗口上输出一段文字
实现：
在OnDraw()函数中输出文字
<需求实现>输出字符串资源里的字符串
需求：
输出字符串资源里的字符串
实现：
新建字符串资源，在OnDraw中输出
<需求实现>创建路径层，将字符串围起来
需求：
创建路径层，将字符串围起来
实现:
获取字符串宽度和高度，绘制路径层
<需求实现>使视类中的绘图操作对路径层所在的区域无效
需求：
使视类中的绘图操作对路径层所在的区域无效
实现：
以RGN_DIFF模式选择路径层为裁剪区
<需求实现>实现文本编辑
需求：
实现文本编辑
实现：
每输入一个字符，就在在光标位置输出整个文本，并处理换行、退格
<需求实现>修改字体
需求：
修改字体
实现：
CFont
<需求实现>卡拉OK的字幕变色效果
需求：
卡拉OK的字幕变色效果
实现：
通过定时器定时改变输出文本的宽度，用DrawText()输出文本
<需求实现>当一个字符串输出完成后，从头开始重新输出
需求：
当一个字符串输出完成后，从头开始重新输出
实现：
判断输出的宽度是否大于字符串宽度