初学做了一个写文本的程序.
编译通过后发现每次写入文字时,如果光标闪耀正好为"白"的时候,就可以正常输入;当光标闪耀为"黑"的时候,就会在输入的那个字符的前面残留一条黑线.
百思不得其解,忘各位知情者相告一二.代码如下:
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;
}