一.创建插入符
1, 添加 View类的 WM_CREATE 消息响应函数
2, 在 CXXXView::OnCreate()中添加
//获得当前文本度量/字体信息
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
//根据当前字体,设置插入符/光标
CreateSolidCaret(20,100); //**
ShowCaret();
二.创建图形插入符
1),为 View类添加成员变量 m_bmp;
2),把上面的**行用如下语句替换
m_bmp.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bitmap);
三:简单的文字输出
CString str;
str="维新科学技术培训中心";
pDC->TextOut(50,50,str);
2),获取文字框大小备用
CSize sz=pDC->GetTextExtent(str);
3),给str重新赋值,以区别于上一个内容。当然,之前需要在String Table中添加IDS_WEIXIN
str.LoadString(IDS_WEIXIN);
pDC->TextOut(0,200,str);
四:鼠标移动插入符
给 View增加两个成员变量:
CString m_strLine 用于存储当前输入行的内容;CPoint m_ptOrigin 用于保存鼠标移动引起插
入符改变时的新行开始位置
在 OnLButtonDown 函数中添加如下内容
SetCaretPos(point);//设置插入符位置
m_strLine.Empty();
m_ptOrigin=point;//保存此位置
五:响应键盘输入
键盘响应需要考虑如下内容:
1, 鼠标点击键盘输入一个字符,显示到键盘上,插入符/光标后移一位。
2, 回车之后,光标下移一行
3, 删除/退格键的响应
下面是程序内容:
1,给 View类添加 WM_CHAR 消息响应函数
2,在 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());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
m_strLine+=nChar;
}
CSize sz=dc.GetTextExtent(m_strLine);
CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
dc.SelectObject(pOldFont);