有如下几个问题:
1.在vs2008中为什么变成了TextOutW函数呢(多了一个w)
2.如何在该函数中添加string(不是cstring!)类型的变量呢?
3.如果要输出一个文本,得这样:pDC->TextOutW(20,40,_T("haha"));那个_T是什么意思呢?
第二个问题我最急! 谢谢高手不吝赐教!
1.在vs2008中为什么变成了TextOutW函数呢(多了一个w)
2.如何在该函数中添加string(不是cstring!)类型的变量呢?
3.如果要输出一个文本,得这样:pDC->TextOutW(20,40,_T("haha"));那个_T是什么意思呢?
第二个问题我最急! 谢谢高手不吝赐教!
======================
有关字符串的API本来就有两个,比如TextOut,其实有两个:TextOutA和TextOutW,前者对应了ANSI编码,后者对应UNICODE编码。实际上并不存在TextOut这个函数,有的只是TextOutA和TextOutW,TextOut只不过是一个宏,在没有定义UNICODE时它被解读为TextOutA,在定义了UNICODE时,它被解读为TextOutW.
2.如何在该函数中添加string(不是cstring!)类型的变量呢?
================
这个没用过,直接用肯定不行,不过string应该可以有转成LPSTR的函数吧。
3.如果要输出一个文本,得这样:pDC->TextOutW(20,40,_T("haha"));那个_T是什么意思呢?
============
_T表示里面的haha是UNICODE编码的。
==============
才查了一下,string有一个方法c_str()可以将它转成char数组,你可以试试
_T表示后面的内容为UNICODE常量字符串
格式不只是_T,那对括号是必须的_T()
同样效果的是以下几种写法TEXT("文本")
_T("文本")
L"文本"
我是这样做的:
string str("haha");
pDC->TextOutW(20,80,_T(str.c_str()));
可惜不对啊。
我的老师给的程序是这样的:
CDC *pDC=GetDC();
char tbuf[80];
sprintf(tbuf,"Position:(%3d,%3d)",point.x,point.y);
// 输出鼠标当前位置
pDC->TextOut(20,20,tbuf);在vs2008上是不行的。
我就是想实现上面这个功能,有办法吗?
char tbuf[80];
sprintf(tbuf,"Position:(%3d,%3d)",point.x,point.y);
// 输出鼠标当前位置
pDC->TextOut(20,20,tbuf);
============
这个为什么不行啊?
它是这样说的:
错误 2 error C2664: “BOOL CDC::TextOutW(int,int,const CString &)”: 不能将参数 3 从“char [80]”转换为“const CString &”
CDC *pDC=GetDC();
TCHAR tbuf[80];
swprintf(tbuf,sizeof(tbuf)/sizeof(TCHAR),_T("Position:(%3d,%3d)"),point.x,point.y);
// 输出鼠标当前位置
pDC->TextOut(20,20,tbuf);
能大概解释下这两句吗?
TCHAR tbuf[80];
swprintf(tbuf,sizeof(tbuf)/sizeof(TCHAR),_T("Position:(%3d,%3d)"),point.x,point.y);
swprintf是sprintf的UNICODE版本。
我觉得你对ANSI与UNICODE好像不是很清楚,建议你去看一下这个:参考