《1》 创建插入符(在OnCreate函数中定义)
1、创建一般字处理程序插入符(利用CreateSolidCaret函数)
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);//获取当前字体的信息
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
//创建插入符,显示在窗口上
ShowCaret();//显示插入符(若不加,插入符则不能显示)
2、创建图形插入符(利用CreateCaret函数)
bitmap.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);
ShowCaret();//显示插入符(若不加,插入符则不能显示)
《2》 文本输出(利用CString类)
首先为了在窗口重绘后文字仍存在,应在OnDraw函数中进行处理
1、//CString str("Hello!");//定义字符串变量并初始化
CString str;
str="Hello";
pDC->TextOut(50,50,str);//第一个和第二个参数分别为x坐标和y坐标
2、利用字符串资源(利用LoadString函数)
CString str;
str.LoadString(IDS_STRING129);//IDS_STRING129为文本的ID号
pDC->TextOut(20,80,str);//第一个和第二个参数分别为x坐标和y坐标
《3》 路径层
路径层主要运用于画图当中,其概念就像当年军阀割据时圈地一样,在地域上划定了界线,界线之内是各自的地盘,别人不能侵犯。VC++中利用CDC提供的BeginPath和EndPath这两个函数来实现路径层。BeginPath()其作用是在设备描述表中打开一个路径层;然后利用图形设备接口提供的函数进行绘图操作,例如绘制一些点、椭圆等;最后,绘图操作完成之后,应用程序调用EndPath()这个函数关闭这个路径层。
《4》 将输入的文本输出
在OnLButtonDown函数中:
SetCaretPos(point); //设置插入符位置与鼠标点击点一样
m_strLine.Empty();//将保存的对象(字符)清空
m_ptOrigin=point;//保存当前坐标
在OnChar函数中对消息进行响应:
CClientDC dc(this);
CFont font;//创建字体
font.CreatePointFont(300,"华文行楷",NULL);
//初始化字体,参数分别为字体大小、字体的名字、用于转换字体为逻辑单位
CFont *pOldFont=dc.SelectObject(&font);
//将设置的字体选到设备描述中,返回先前的字体类型
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);//求字体的高度
if(0x0d==nChar)
{
m_strLine.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
else if(0x08==nChar)
{
COLORREF clr=dc.SetTextColor(dc.GetBkColor());
//GetBkColor作用是获取背景色,SetTextColor设置文本颜色,返回值为先前的文本颜色
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
//输出字符串(此时文本颜色为背景色)
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);//Left函数作用为取左边的固定个数的字符;GetLength作用是得到保存的字符个数
dc.SetTextColor(clr);//设置文本颜色为先前颜色
}
else
{
m_strLine+=(CHAR)nChar;
}
//实现插入符随着输入位置移动
CSize sz=dc.GetTextExtent(m_strLine);//获取当前字体的信息
CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);//设置插入符位置与pt一样
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
dc.SelectObject(pOldFont);//将原先的字体信息选回
引:可利用CEditView和CRichEditView类
《5》实现卡拉OK式字幕变色效果(平滑的过渡变色,利用DrawText)
1、设置定时器(利用SetTimer函数)
在OnCreate函数中:
SetTimer(1,100,NULL);//定义定时器
2、增加消息响应MW_TIMER,并在此函数中添加如下代码:
m_nWidth+=5;
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);//获取字体信息
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_STRING129);//获取文本
dc.DrawText(str,rect,DT_LEFT);//输出文本
CSize sz=dc.GetTextExtent(str);//获取字符串在屏幕显示的宽度
if(m_nWidth>sz.cx)//超过字体宽度,重新从头开始输出
{
m_nWidth=0;
dc.SetTextColor(RGB(0,255,0));
dc.TextOut(0,200,str);
}