MFC文本插入符残留,该怎么处理

MFC文本插入符残留
MFC文本插入符残留,该怎么处理我在改变Caret位置时(如回车),上一个Caret会残留在String的末尾。
我是用vs2010创建的。.net4。消息和成员变量都没问题。如图,第一个串Thanks,第二个串Very,第三个串Much结束时都有残留文本插入符,如图。请问应该如何处理?究竟是哪的问题?

这个问题已经困扰我好久了,请大家帮帮忙。非常感谢。先谢谢大家了。
CString m_strTotal[100]、CPoint m_ptTotal[100]这两个是用于窗口重绘的,就是记录前面的作图步骤,CString m_strLine是当前的字符串,CPoint m_ptOrigin是当前字符串的位置。CPoint m_ptCaret是重绘时候确定插入符用的。我发现,把OnChar函数里面的二三四行(即和CFont有关的)删去就不会残留插入符了。但是,如果注释掉这三行,就不能用字体了。请问是怎么回事?多谢了。

还有,树上的代码和这个功能一样,在vc6上编译就没有插入符残留,在vs2010上就有。请问何故?



代码如下:
// CTextView 消息处理程序


void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

{

 // TODO: 在此添加消息处理程序代码和/或调用默认值

 CClientDC dc(this);

 

 CFont font;

 font.CreatePointFont(CharSize,L"华文行楷",NULL);

 CFont *pOldFont = dc.SelectObject(&font);

 

 TEXTMETRIC tm;

 dc.GetTextMetrics(&tm);

 if(0x0d == nChar){                    //回车符

  m_strTotal[count] = m_strLine;

  m_strLine.Empty();

  m_ptOrigin.y = m_ptOrigin.y + tm.tmHeight;

  m_ptTotal[count] = m_ptOrigin;

  count++;

 }

 else if(0x08 == nChar){               //退格符

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

  m_strTotal[count] = m_strTotal[count].Left(m_strTotal[count].GetLength()-1);

  dc.SetTextColor(clr);

 }else{

  m_strLine = m_strLine + char(nChar);

  m_strTotal[count] = m_strTotal[count] + char(nChar);
 }

 

 CSize sz = dc.GetTextExtent(m_strLine);


 CPoint pt;

 pt.x = m_ptOrigin.x + sz.cx;
 pt.y = m_ptOrigin.y;

 

 SetCaretPos(pt);

 m_ptCaret = pt;

 dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);

 dc.SelectObject(pOldFont);

 CView::OnChar(nChar, nRepCnt, nFlags);}


void CTextView::OnLButtonDown(UINT nFlags, CPoint point)

{
 // TODO: 在此添加消息处理程序代码和/或调用默认值

 

 m_ptCaret = point;


 SetCaretPos(point);

 m_strTotal[count] = m_strLine;

 m_strLine.Empty();

 m_ptOrigin = point;

 m_ptTotal[count] = point;

 count++;

 CView::OnLButtonDown(nFlags, point);
}

 


int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

 if (CView::OnCreate(lpCreateStruct) == -1)
  return -1;

 

 // TODO:  在此添加您专用的创建代码


 CClientDC dc(this);

 

 CFont font;

 font.CreatePointFont(CharSize,L"华文行楷",NULL);

 CFont *pOldFont = dc.SelectObject(&font);

 

 TEXTMETRIC tm;

 dc.GetTextMetrics(&tm);

 CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
 ShowCaret();

 

 dc.SelectObject(pOldFont);


 return 0;
}

 

 

BOOL CTextView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)


{

 // TODO: 在此添加消息处理程序代码和/或调用默认值

 CharSize = CharSize + int(zDelta);

 return CView::OnMouseWheel(nFlags, zDelta, pt);

}

------解决方案--------------------
发代码的时候用C++格式吧,别人好看一点啊
------解决方案--------------------
引用:
引用:发代码的时候用C++格式吧,别人好看一点啊
抱歉,第一次发帖。
这个代码是我截取的一段,我也不知道错在哪。
还请见谅。


明天我看看,今天太晚了。。。。。。。。
------解决方案--------------------
去VC/MFC论坛问问?
以便分页,就跟在word中插入分页符一样效果,详情见内,该怎么处理" target="_blank"> 讨论和寻求支持:在网页的任何位置插入分页样式
以便分页,就跟在word中插入分页符一样效果,详情见内,该怎么处理
  • vb.net向建好的word模板里插入文本?该怎么处理
  • MFC怎样读取一个文本文档的字符串,该怎么处理
  • 关于插入符,该怎么处理
  • 在网页文本部分中动态插入图片,该怎么处理
  • 了解人和计算机各自擅长做的事情很重要
  • 树立个人品牌:让名企hr们踊跃来找你