1、MFC提供了CFont类专门用来设置字体,包括:CreateFont/CreateFontIndirect/CreatePointFont/CreatePointFontIndirect
例:
CFont font; font.CreatePointFont(300,"黑体",NULL); CFont *pOldFont=dc.SelectObject(&font); ... dc.SelectObject(pOldFont);
若要实现功能完整的字处理程序,需利用MFC提供的CEditView/CRichEditView这两个类,后者的功能强于前者;如果让程序的视图窗口类直接派生于这两个类之一的话,程序就默认具备字处理程序的一些基本功能了。
2、字幕变色功能
int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );
DrawText函数:在指定的矩形范围内输出文字;将其限制的显示范围覆盖在原位置的完整文本上,不断增加限制范围的宽度,并在限制范围内以不同颜色显示原文本内容,以达到卡拉OK的字幕变色效果:
在CTextView类的OnCreate函数中设置定时器:
SetTimer(非0值的定时器标识,定时间隔,NULL);
//设置定时器
SetTimer(1,100,NULL)
给CTextView类添加WM_TIMER消息的响应函数:
自动生成的响应函数OnTimer的nIDEvent参数即为定时器的标识,当程序有多个定时器时,可根据判断其标识的不同做不同的处理
DrawText函数的第二个参数需要设置一个变量值来表示矩形限制范围的宽度,在CTextView类中添加一个成员变量:int m_nWidth,在CTextView类的构造函数中将该变量初始化为0
CTextView::CTextView() { // TODO: add construction code here m_strLine=""; m_ptOrigin=0; m_nWidth=0; }
该矩形限制范围的宽度由m_nWidth变量决定,高度由设备描述表中当前字体的高度决定(即需要显示的文本的高度);当完整文本全部输出完成后,应将矩形限制范围的宽度重置为0后再从新显示:
void CTextView::OnTimer(UINT nIDEvent) { if(1==nIDEvent){ //判断定时器所对应的标识 m_nWidth+=5; //设置m_nWidth变量的值按5像素点增加 CClientDC dc(this); //获取设备描述表中当前字体的信息 TEXTMETRIC tm; dc.GetTextMetrics(&tm); //初始化DrawText函数所要限定的矩形范围 CRect rect; rect.left=0; rect.top=200; rect.right=m_nWidth; rect.bottom=rect.top+tm.tmHeight; //将设备描述表中文本颜色设置为红色 dc.SetTextColor(RGB(255,0,0)); //获得要显示的字符串资源 CString str; str.LoadString(IDS_STRING); dc.DrawText(str,rect,DT_LEFT); //DT_LEFT/DT_RIGHT/DT_CENTER //获取需要显示的字符串的尺寸 //当限制显示范围的矩形范围宽度超过字符串的宽度时,将该矩形范围宽度设为0,将字符串重新开始输出,并将已输出的文本颜色设为蓝色 CSize sz=dc.GetTextExtent(str); if(m_nWidth>sz.cx){ m_nWidth=0; dc.SetTextColor(RGB(0,0,255)); dc.TextOut(0,200,str); } } CView::OnTimer(nIDEvent); }