下面是我的代码
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类型,需要怎么转换,如果是其他原因造成的,也请大神们指点下,谢谢了

解决方案 »

  1.   

    代码好长,没细看,你试试这个,应该OKCString str;
    UINT  nInt;
    str.Format(_T("%d"),nInt);要不你就这样
    用atoi或者itoa这类的函数搞定
    int   nValue   =   atoi(str.GetBuffer(0))   ;
    UINT   nUint   =   (UINT)nValue   ;
      

  2.   

    最方便的做法是将字符集由UNICODE改成多字节。
      

  3.   

    CString a;
    UINT b = 0;
    a.format("%d", b);经测试可用,另外,字符串最好先格式化在再进行 + 操作。你的代码可以这样写
    CString str;
    str.format("%d", nChar);
    m_strLine += str;
      

  4.   

    CString str;
    str.format(_T("%d"), nChar);
    m_strLine += str; 
      

  5.   

    m_strLine += nChar; 
    你看看你的m_strLine是什么类型?
      

  6.   

    其他类型转CString最简单,用CString::Format至于编码的问题,你按编码规则来
      

  7.   

    atoi  貌似比较快不过俺一般习惯用  FORMAT
      

  8.   

    来晚了,上边讲得都挺好。
    UINT是无符号整型数据,在转CString,long 时没有问题,但在转INT是需要主要越界。
      

  9.   

    tt
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  10.   

    tt
      
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  11.   


    这个方法 我用的成功,其他的方法就不会了m_strLine是CString类型,  我需要的是吧UINT转换成CString类型,再把2个CString相加
      

  12.   

    ...
    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);
    }
      

  13.   

    只有TCHAR最正确了,其他不行