代码是这样的:void CMyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) //接收键盘输入信息
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(nChar==0x0d)//按回车键
{
   Write_Str.Empty();
   First_Point.y=First_Point.y+tm.tmHeight;//换行
   SetCaretPos(First_Point);
}
else if(nChar==0x08)//按删除键
{
COLORREF ref=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(First_Point.x,First_Point.y,Write_Str);//清除原有字幕
Write_Str=Write_Str.Left(Write_Str.GetLength()-1);
dc.SetTextColor(ref);
}
else
{
Write_Str+=nChar;
}
    CPoint Caret_Point;
CSize size;
size=dc.GetTextExtent(Write_Str);//每一行文字的长度
Caret_Point.x=First_Point.x+size.cx;
Caret_Point.y=First_Point.y;
SetCaretPos(Caret_Point);//设置插入符的位置
dc.TextOut(First_Point.x,First_Point.y,Write_Str);//输入文本
CView::OnChar(nChar, nRepCnt, nFlags);
}

解决方案 »

  1.   

    刷新问题,绘图操作的代码最好放到OnDraw函数中去做
      

  2.   

    还有就是onpaint函数和ondraw函数一样,当窗体改变时都会调用?
    还有个问题:每进行一次文件输入,它都会调用ondraw函数吗?
    知道的朋友,帮我解答写,谢谢。
      

  3.   

    CMyView 派生自CEditView不是省事些?
      

  4.   

    你要是不想移到OnPain OnDraw就刷新一下Invalidate或者刷新一块区域InvalidateRect()
      

  5.   

    没必要那么麻烦 在TextOut函数前加入HideCaret函数即可解决问题