相关的主要处理代码如下:
void CGraphicView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if(m_isText)
{

CClientDC dc(this);
CFont *pOldFont=dc.SelectObject(&m_font);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if (0x0d==nChar)
{
m_ptOrigin.y+=tm.tmHeight;
m_myText.Empty();
}
else if (0x08==nChar)
{
COLORREF OldColor=dc.SetTextColor(dc.GetBkColor());
dc.TextOutA(m_ptOrigin.x,m_ptOrigin.y,m_myText);
m_myText=m_myText.Left(m_myText.GetLength()-1);
dc.SetTextColor(OldColor);
}
else
{
m_myText+=(char)nChar;
}
CSize sz=dc.GetTextExtent(m_myText);
CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);
dc.TextOutA(m_ptOrigin.x,m_ptOrigin.y,m_myText);

dc.SelectObject(pOldFont);
}
CView::OnChar(nChar, nRepCnt, nFlags);
}

解决方案 »

  1.   

    SetCaretPos 和 TextOutA 之前给后续的行区域填充背景色
    CSize sz=dc.GetTextExtent(m_myText);
            CPoint pt;
            pt.x=m_ptOrigin.x+sz.cx;
            pt.y=m_ptOrigin.y;dc.FillSolidRect(m_ptOrigin.x,m_ptOrigin.y,
      rcClientRect.right - m_ptOrigin.x, sz.cy); //填充背景色        SetCaretPos(pt);
            dc.TextOutA(m_ptOrigin.x,m_ptOrigin.y,m_myText);
      

  2.   

    请将你绘图的代码放到OnDraw函数中去做
      

  3.   

    实在不好意思,我是VS2005,XP SP2的,要升级了SP3才能装VS2010.