关于文本输入程序中光标的擦除问题
初学做了一个写文本的程序.
编译通过后发现每次写入文字时,如果光标闪耀正好为"白"的时候,就可以正常输入;当光标闪耀为"黑"的时候,就会在输入的那个字符的前面残留一条黑线.
百思不得其解,忘各位知情者相告一二.
代码如下:
void CTextView::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);
CPoint pt;
if(0x0d==nChar)
{
m_strLine.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
else if(0x08==nChar)
{
COLORREF color;
color = 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(color);
}
else
{
m_strLine+=nChar;
}
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
CSize sz=dc.GetTextExtent(m_strLine);
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);
CView::OnChar(nChar, nRepCnt, nFlags);
}
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CreateSolidCaret(tm.tmAveCharWidth/4,tm.tmHeight);
ShowCaret();
dc.SelectObject(GetFont());
return 0;
}