![]() |
#2
fxbszj2013-09-07 17:37
|

void CTest01View::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);
//换行
if(0x0d==nChar)
{
m_strLine.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
//退格键
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);
dc.SetTextColor(clr);
//dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
}
else
m_strLine+=nChar;
//输入时根据内容改变位置
CSize sz=dc.GetTextExtent(m_strLine);
CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
CView::OnChar(nChar, nRepCnt, nFlags);
}
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
//换行
if(0x0d==nChar)
{
m_strLine.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
//退格键
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);
dc.SetTextColor(clr);
//dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
}
else
m_strLine+=nChar;
//输入时根据内容改变位置
CSize sz=dc.GetTextExtent(m_strLine);
CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m_ptOrigin.y;
SetCaretPos(pt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
CView::OnChar(nChar, nRepCnt, nFlags);
}
这是<VC++深入详解>第5章关于字符输入显示的一段,m_strLine是CString类型的空串,用来存储输入的字符串。然后m_strLine+=nChar;这段就不能通过,提示“ error C2593: “operator +=”不明确”,一个CString类型,一个UINT类型,强制类型转换也不行。vs2005-2010-2012都不能编译通过,VC6.0倒是能过。但长远看,不可能永远用VC6吧,在VS中要怎么修改呢