在View中,接受用户输入文本,按回车可换行,按退格键删除一个字符
先在View中增加两个成员变量:
CPoint m_ptOrigin; //保存鼠标按下的点(光标停留处)
CString m_strLine; //保存之前输入的字符
void CTextView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetCaretPos(point);
//设置光标位置为左键按下处
m_strLine.Empty();
//左键在另一位置按下时清空字符串,保存新位置输入字符
m_ptOrigin=point;
//输入起点赋值为左键在另一位置按下的点
CView::OnLButtonDown(nFlags, point);
}
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
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)
//如果按下退格键
{
//dc.GetBkColor()获得背景色白色,把文本字体设为白色
//clr为返回的原来字体颜色:黑色
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;
//输入每一个新字符加入m_strLine中
}
//获得字符串长宽信息
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);
CView::OnChar(nChar, nRepCnt, nFlags);
}