在VS2010上编程MFC出现的问题,看那位大神解决。

时间:2022-09-07 23:02:12
void Clong2View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
dc.GetTextMetrics(&tm);
if(13==nChar)
{
str_line.Empty();
m_point.y+=tm.tmHeight;
}
else if(8==nChar)
{  
COLORREF clf=dc.SetTextColor(dc.GetBkColor());
dc.TextOutA(m_point.x,m_point.y,str_line);
str_line=str_line.Left(str_line.GetLength()-1);
dc.SetTextColor(clf);
}
else{
     
      str_line += nChar;

}但编译总出现这个问题f:\program files\long2\long2\long2view.cpp(172): error C2593: “operator +=”不明确

15 个解决方案

#1


f:\program files\long2\long2\long2view.cpp(172): error C2593: “operator +=”不明确
中的long2view.cpp(172)是指哪一行?m_point.y+=tm.tmHeight;?str_line += nChar;?还有你的各种变量的类型是什么,比如m_point什么都没有说明确不好回答啊 

#2


m_point.y是double
应该是str_line += nChar
一个是Cstring 一个是UINT(unsigned int)需要类型转换一下
要么吧CString转换为int 要么吧UINT转换为CString百度有方法

#3


强制类型转换一下把,估计是类型的问题

#4


学习中~  除了强制转换还有没有其他方法啊

#5


str_line += nChar;

    改成
    str_line += (TCHAR)nChar;

    或者
    str_line.AppendChar(nChar);

#6


CString操作符重载的问题,2和5楼说的很明确了

#7


楼主的编译环境是啥啊,如果在VC6.0下编译
str_line是Cstring nChar是UINT

那么str_line += nChar这句话是不会报错的。

例如:   CString s = "12345";
UINT nchar = 0x36;
s += nchar;

会输出结果123456

#8


是在VS2010里面编译的,5楼说的那种方法都用过了,编译没问题,连接就弹出错误的框出来,主要那str_line+=nChar 那的问题。在VC6.0这样做成功没错,在那VS2010就不行,而且我在建MFC项目时把那Unicode那个选项的默认关掉了。

#9


这个问题解决了,如果创建的MFC项目的时候那个Unicode选项不关掉使用默认状态,并且在str_line+=(TCHAR)nChar;那里加个强制转换,就一切没问题了,编译连接都可以。但如果创项目是把Unicode选项关掉,一样使用强制转换时,编译没错,连接的时候就出现那个弹出的BUG框,谁能帮忙解释下这其中的缘由。

#10


引用 9 楼 oppo_py 的回复:
这个问题解决了,如果创建的MFC项目的时候那个Unicode选项不关掉使用默认状态,并且在str_line+=(TCHAR)nChar;那里加个强制转换,就一切没问题了,编译连接都可以。但如果创项目是把Unicode选项关掉,一样使用强制转换时,编译没错,连接的时候就出现那个弹出的BUG框,谁能帮忙解释下这其中的缘由。

连接是报什么错?

dc.TextOutA(m_point.x,m_point.y,str_line);

BOOL TextOut(
   int x,
      int y,
      const CString& str 
);

这个A表示明确为多字节码。而你的str_line是CString,根据unicode设置对应W或A。为什么你关闭Unicode返回会出错呢?

#11


在关掉unicode后只可以打出TextOutA,没关掉unicode只可以打出TextOutW而且只有这样改变才会不出错。难道编译这个程序就不能关掉Unicode吗?真的时奇怪。出错也不是什么程序出错,再弹出EXE框之前,弹出个BUG框。

#12


用unicode这个选项,为什么不用TextOut这个函数呢?而要用特指的W A版本?

#13


引用 2 楼 hnuqinhuan 的回复:
m_point.y是double
应该是str_line += nChar
一个是Cstring 一个是UINT(unsigned int)需要类型转换一下
要么吧CString转换为int 要么吧UINT转换为CString百度有方法


++

#14


该回复于2011-10-31 14:29:39被版主删除

#15


在VS2010中不存在TextOut函数,只存在那个带A或W的,把那个UNICODE打开就显示W的不打开UNICODE就显示A的,而问题是,只有把UNICODE打开才能成功。

#1


f:\program files\long2\long2\long2view.cpp(172): error C2593: “operator +=”不明确
中的long2view.cpp(172)是指哪一行?m_point.y+=tm.tmHeight;?str_line += nChar;?还有你的各种变量的类型是什么,比如m_point什么都没有说明确不好回答啊 

#2


m_point.y是double
应该是str_line += nChar
一个是Cstring 一个是UINT(unsigned int)需要类型转换一下
要么吧CString转换为int 要么吧UINT转换为CString百度有方法

#3


强制类型转换一下把,估计是类型的问题

#4


学习中~  除了强制转换还有没有其他方法啊

#5


str_line += nChar;

    改成
    str_line += (TCHAR)nChar;

    或者
    str_line.AppendChar(nChar);

#6


CString操作符重载的问题,2和5楼说的很明确了

#7


楼主的编译环境是啥啊,如果在VC6.0下编译
str_line是Cstring nChar是UINT

那么str_line += nChar这句话是不会报错的。

例如:   CString s = "12345";
UINT nchar = 0x36;
s += nchar;

会输出结果123456

#8


是在VS2010里面编译的,5楼说的那种方法都用过了,编译没问题,连接就弹出错误的框出来,主要那str_line+=nChar 那的问题。在VC6.0这样做成功没错,在那VS2010就不行,而且我在建MFC项目时把那Unicode那个选项的默认关掉了。

#9


这个问题解决了,如果创建的MFC项目的时候那个Unicode选项不关掉使用默认状态,并且在str_line+=(TCHAR)nChar;那里加个强制转换,就一切没问题了,编译连接都可以。但如果创项目是把Unicode选项关掉,一样使用强制转换时,编译没错,连接的时候就出现那个弹出的BUG框,谁能帮忙解释下这其中的缘由。

#10


引用 9 楼 oppo_py 的回复:
这个问题解决了,如果创建的MFC项目的时候那个Unicode选项不关掉使用默认状态,并且在str_line+=(TCHAR)nChar;那里加个强制转换,就一切没问题了,编译连接都可以。但如果创项目是把Unicode选项关掉,一样使用强制转换时,编译没错,连接的时候就出现那个弹出的BUG框,谁能帮忙解释下这其中的缘由。

连接是报什么错?

dc.TextOutA(m_point.x,m_point.y,str_line);

BOOL TextOut(
   int x,
      int y,
      const CString& str 
);

这个A表示明确为多字节码。而你的str_line是CString,根据unicode设置对应W或A。为什么你关闭Unicode返回会出错呢?

#11


在关掉unicode后只可以打出TextOutA,没关掉unicode只可以打出TextOutW而且只有这样改变才会不出错。难道编译这个程序就不能关掉Unicode吗?真的时奇怪。出错也不是什么程序出错,再弹出EXE框之前,弹出个BUG框。

#12


用unicode这个选项,为什么不用TextOut这个函数呢?而要用特指的W A版本?

#13


引用 2 楼 hnuqinhuan 的回复:
m_point.y是double
应该是str_line += nChar
一个是Cstring 一个是UINT(unsigned int)需要类型转换一下
要么吧CString转换为int 要么吧UINT转换为CString百度有方法


++

#14


该回复于2011-10-31 14:29:39被版主删除

#15


在VS2010中不存在TextOut函数,只存在那个带A或W的,把那个UNICODE打开就显示W的不打开UNICODE就显示A的,而问题是,只有把UNICODE打开才能成功。