下面是我的代码
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
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);
}
else
{
m_strLine += nChar; //here错误
} 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);
}
在编译的时候出现,提示了
c:\documents and settings\administrator\桌面\text\text\textview.cpp(189): error C2593: “operator +=”不明确
1> e:\visual studio 2010\vc\atlmfc\include\cstringt.h(1338): 可能是“ATL::CStringT<BaseType,StringTraits> &ATL::CStringT<BaseType,StringTraits>::operator +=(wchar_t)”
1> with
1> [
1> BaseType=char,
1> StringTraits=StrTraitMFC_DLL<char>
1> ]
1> e:\visual studio 2010\vc\atlmfc\include\cstringt.h(1331): 或 “ATL::CStringT<BaseType,StringTraits> &ATL::CStringT<BaseType,StringTraits>::operator +=(unsigned char)”
1> with
1> [
1> BaseType=char,
1> StringTraits=StrTraitMFC_DLL<char>
1> ]
1> e:\visual studio 2010\vc\atlmfc\include\cstringt.h(1319): 或 “ATL::CStringT<BaseType,StringTraits> &ATL::CStringT<BaseType,StringTraits>::operator +=(char)”
1> with
1> [
1> BaseType=char,
1> StringTraits=StrTraitMFC_DLL<char>
1> ]
1> 尝试匹配参数列表“(CString, UINT)”
时这样的错误,我猜测是类型不对造成的,敢问,如果是类型不对造成的,我想把UINT转换成CString类型,需要怎么转换,如果是其他原因造成的,也请大神们指点下,谢谢了
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
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);
}
else
{
m_strLine += nChar; //here错误
} 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);
}
在编译的时候出现,提示了
c:\documents and settings\administrator\桌面\text\text\textview.cpp(189): error C2593: “operator +=”不明确
1> e:\visual studio 2010\vc\atlmfc\include\cstringt.h(1338): 可能是“ATL::CStringT<BaseType,StringTraits> &ATL::CStringT<BaseType,StringTraits>::operator +=(wchar_t)”
1> with
1> [
1> BaseType=char,
1> StringTraits=StrTraitMFC_DLL<char>
1> ]
1> e:\visual studio 2010\vc\atlmfc\include\cstringt.h(1331): 或 “ATL::CStringT<BaseType,StringTraits> &ATL::CStringT<BaseType,StringTraits>::operator +=(unsigned char)”
1> with
1> [
1> BaseType=char,
1> StringTraits=StrTraitMFC_DLL<char>
1> ]
1> e:\visual studio 2010\vc\atlmfc\include\cstringt.h(1319): 或 “ATL::CStringT<BaseType,StringTraits> &ATL::CStringT<BaseType,StringTraits>::operator +=(char)”
1> with
1> [
1> BaseType=char,
1> StringTraits=StrTraitMFC_DLL<char>
1> ]
1> 尝试匹配参数列表“(CString, UINT)”
时这样的错误,我猜测是类型不对造成的,敢问,如果是类型不对造成的,我想把UINT转换成CString类型,需要怎么转换,如果是其他原因造成的,也请大神们指点下,谢谢了
UINT nInt;
str.Format(_T("%d"),nInt);要不你就这样
用atoi或者itoa这类的函数搞定
int nValue = atoi(str.GetBuffer(0)) ;
UINT nUint = (UINT)nValue ;
UINT b = 0;
a.format("%d", b);经测试可用,另外,字符串最好先格式化在再进行 + 操作。你的代码可以这样写
CString str;
str.format("%d", nChar);
m_strLine += str;
str.format(_T("%d"), nChar);
m_strLine += str;
你看看你的m_strLine是什么类型?
UINT是无符号整型数据,在转CString,long 时没有问题,但在转INT是需要主要越界。
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
这个方法 我用的成功,其他的方法就不会了m_strLine是CString类型, 我需要的是吧UINT转换成CString类型,再把2个CString相加
else
{
CString str;
str.Format(_T("%c"),nChar);
m_strLine += str;
}
...这样就行了,刚才已测试过,用的是VS2008。(注:调试前,修改:项目--属性-->配置属性-->字符集,改成“使用多字节字符集”)
我调试的完整代码是:int Ccharpter5_testView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1; // TODO: 在此添加您专用的创建代码
/*//添加插入符
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
ShowCaret();*/ //添加位图插入符
bitmap.LoadBitmapA(IDB_BITMAP1);
CreateCaret(&bitmap);
ShowCaret();
return 0;
}void Ccharpter5_testView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
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.TextOutA(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);
dc.SetTextColor(clr);
}
else
{
CString str;
str.Format("%c",nChar);
m_strLine += str;
} CSize sz=dc.GetTextExtent(m_strLine);
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_strLine);
CView::OnChar(nChar, nRepCnt, nFlags);
}void Ccharpter5_testView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
SetCaretPos(point);
m_strLine.Empty();
m_ptOrigin=point; CView::OnLButtonDown(nFlags, point);
}