相关的主要处理代码如下:
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);
}
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);