3.关于VS2008 中的pDC->TextOut 参数转换问题 <Unicode Character>

来源:互联网 发布:2017基金业绩排行知乎 编辑:程序博客网 时间:2024/06/04 19:03

在vs2008新建一个单文本文档的MFC Application工程中,在view里的ondraw函数添加语句:pDC->TextOutW(0,0,"hello world !gwb");

而会提示一个错误:

error C2664: 'BOOL CDC::TextOutW(int,int,const CString &)' : cannot convert parameter 3 from 'const char [17]' to 'const CString &'

然后上网也出查找了一下,看到了一些类似的问题.

///////////////////////////////////////////////////////////////////////////////////////////////

最近在将一个以前的大项目从VC6升级到VC2005时,也就是VC8时,遇到了一个非常让人困惑的问题,那就是:

在vs2005新建一个sdi文档中的view里的ondraw函数不可以执行pDC->TextOut(5,5,"hello");该语句,编译无法通过。 

但该升级的项目程序中包含有大量的类似于pDC->TextOut(x,y,"xxxx");的语句,确没有任何改动,而顺利通过编译。

这是为什么呢?

为了解决这个问题,我特意如下做了一个测试:

1、在vc6下创建了一个sdi文档的程序,并在view中的ondraw函数中增加pDC->TextOut(5,5,"hello");函数,编译运行测试,毫无疑问,是OK的。

2、将改程序直接用VS2005打开,自动升级完毕,ondraw函数中也没有任何改变,单击运行,OK,也是正常的。

3、在VC2005下创建了一个sdi文档的程序,并在view中的ondraw函数中增加以下语句:

pDC->TextOut(5,5,"hello");             //error   

pDC->TextOut(5,5,_T("hello"));      //ok

pDC->TextOut(5,5,L"hello");          //ok

编译运行测试,结果如注释部分所示。

 

通过一个下午的摸索,终于我自己也算是部分找到了答案:

VC8默认编译环境为unicode

vc6升级到vc8之后,其环境默认为Use Multi-Byte character set

字符集环境设置:menu->Project->Tmd Properties->Configuartions Properties->Character Set,该选项包含下面3种:

1、No Set

2、Use unicode character set     //必须加_T或L对“XXXX”字符串进行转换

3、Use Multi-Byte character set

如果是从升级过来的程序,无论选择1、2、3哪个选项:

pDC->TextOut(5,5,"hello");

均没有任何编译错误。不知道为什么对于选择2,编译器却没有做出错误提示,而是顺利通过??? 

但是下面的语句:

str.Format("%.2f",2.1);

则无法在选择2的情况下通过,其它1、3则OK。

如果是直接从vs2005创建的程序上面两个语句在选择2的情况下均无法通过编译,加_T("")或者L""之后才OK。如果选择1和3,则亦可以顺利编译通过并正确运行。

///////////////////////////////////////////////////////////////////////////////////////////////

其实,我们用VS2008在建立一个单文本文档的MFC Application工程的时候的第一个界面就会出现一个选项Use Unicode libraries.一般的默认是选中的.

如果我们选中上面这个选项的话呢,就和平常一样的.不会出现上面的那个编译错误.

而如果没有选中了的话.我们可以修改pDC->TextOut语句为pDC->TextOut(5,5,_T("hello"));  or  pDC->TextOut(5,5,L"hello"); 

然后在去编译就可以通过了.OK.

0 0
原创粉丝点击