文本编程:模仿记事本

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值