一个简单文字处理(实现文字输出,换行,和Backspace功能)
为方便起见,我只写我有点不明白的地方,问题很小
void CMyView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CFont fn;
fn.CreatePointFont(120,"楷体");
CFont *pOldfn=dc.SelectObject(&fn);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
ShowCaret();
if ('\15'==nChar)
{
m_ptOrigin.x=0;
m_ptOrigin.y=m_ptOrigin.y+tm.tmHeight;
//m_ptOrigin.y+=tm.tmHeight;
m_strinput.Empty();
}
else if(0x08==nChar)
{
COLORREF Oldcolor;
Oldcolor=dc.SetTextColor(dc.GetBkColor());
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strinput);
m_strinput=m_strinput.Left(m_strinput.GetLength()-1);
dc.SetTextColor(Oldcolor);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strinput);
}
else
{
//m_strinput=m_strinput+nChar;在这里有问题!!!!!!!! m_strinput+=nChar;//接受其它字符输入 并且把输入的字符都赋值给字符串
}
CSize sz;
sz=dc.GetTextExtent(m_strinput);
CPoint newpt;
newpt.x=sz.cx;
newpt.y=m_ptOrigin.y;
SetCaretPos(newpt);
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strinput);
dc.SelectObject(pOldfn);
CView::OnChar(nChar, nRepCnt, nFlags);
}
1:我注释那一行和下面是不是一个意思?
2:另外nChar是int类型的 而m_strinput是CString类型的,这样可以用+号吗 ?
3:我又用m_strinput+ =nChar;代替了m_strinput+=nChar;这样就无法运行了 这两个有区别?
4:我在线等 要是有不明白我说的意思的 我可以进一步解释