文字编辑和文字处理

一.创建插入符

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);

原文地址:https://www.cnblogs.com/yuqilihualuo/p/2998956.html