void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
// TODO: Add your message handler code here and/or call default
CPoint pt;
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d==nChar)
{
m_stLine.Empty();
m_ptOrgin.y+=tm.tmHeight;
}
else if(0x08==nChar)
{
COLORREF clr=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrgin.x,m_ptOrgin.y,m_stLine);
m_stLine=m_stLine.Left(m_stLine.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
m_stLine+=nChar;
}
CSize sz=dc.GetTextExtent(m_stLine);
CPoint pt_t;
pt_t.x=m_ptOrgin.x+sz.cx;
pt_t.y=m_ptOrgin.y;
SetCaretPos(pt_t); dc.TextOut(m_ptOrgin.x,m_ptOrgin.y,m_stLine);
CView::OnChar(nChar, nRepCnt, nFlags);
}
以上是一个onChar函数代码. m_stLine是CString类型对象. 在击Enter回车后. 换行. 执行m_stLine.Empty();这个Empty()是做什么用的. 如果是将m_stLine清空的话. 那回车后.上一行的显示字符串没有清掉只是换一行显示罢了.那是否是起该行结束作用? 

解决方案 »

  1.   

    如果是CString对象,那就是清空
      

  2.   

    楼主好像没理解这断代码Empty就是清空字符串
    你所说的换行是在dc.TextOut(m_ptOrgin.x,m_ptOrgin.y,m_stLine);通过前两个参数给的坐标视觉上造成换行
    还有你说的上一行的显示字符没有清掉,这个是已经换到视图上了,如果没有更新当然还是显示在那边的,试试最小化再最大化还有,CString,Empty,都知道了,为什么不查MSDN
      

  3.   

    Forces a string to have 0 length.
      

  4.   

    以后这些问题应该先去看看MSDN!
      

  5.   

    喔.谢谢了. 俺看了MSDN. 俺犯了小错误如belivevefy所说.