有如下几个问题:
1.在vs2008中为什么变成了TextOutW函数呢(多了一个w)
2.如何在该函数中添加string(不是cstring!)类型的变量呢?
3.如果要输出一个文本,得这样:pDC->TextOutW(20,40,_T("haha"));那个_T是什么意思呢?
第二个问题我最急! 谢谢高手不吝赐教!

解决方案 »

  1.   

    1.在vs2008中为什么变成了TextOutW函数呢(多了一个w)
    ======================
    有关字符串的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编码的。
      

  2.   

    2.如何在该函数中添加string(不是cstring!)类型的变量呢?
    ==============
    才查了一下,string有一个方法c_str()可以将它转成char数组,你可以试试
      

  3.   

    3
    _T表示后面的内容为UNICODE常量字符串
    格式不只是_T,那对括号是必须的_T()
    同样效果的是以下几种写法TEXT("文本")
    _T("文本")
    L"文本"
      

  4.   


    我是这样做的:
    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上是不行的。
    我就是想实现上面这个功能,有办法吗?
      

  5.   

    CDC *pDC=GetDC();
      char tbuf[80];
    sprintf(tbuf,"Position:(%3d,%3d)",point.x,point.y);
    // 输出鼠标当前位置
      pDC->TextOut(20,20,tbuf);
    ============
    这个为什么不行啊?
      

  6.   

    是pDC->TextOut(20,20,tbuf)函数的参数不匹配。
    它是这样说的:
    错误 2 error C2664: “BOOL CDC::TextOutW(int,int,const CString &)”: 不能将参数 3 从“char [80]”转换为“const CString &”
      

  7.   

    你改成这样试试:
    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);
      

  8.   

    有一点点瑕疵,就是最右边的括号有时会多出来一些,大体上是好了,非常感谢啊!
    能大概解释下这两句吗?
     TCHAR tbuf[80];
    swprintf(tbuf,sizeof(tbuf)/sizeof(TCHAR),_T("Position:(%3d,%3d)"),point.x,point.y);
      

  9.   

    TCHAR tbuf[80];是定义一个字符数组,TCHAR其实也是一个宏,在VS2008中,都是UNICODE编码的,所以THCAR被解读为wchar tbuf[80];
    swprintf是sprintf的UNICODE版本。
    我觉得你对ANSI与UNICODE好像不是很清楚,建议你去看一下这个:参考