_T好像是UNICODE才使用的,我看到很多例程里都使用了这个,但是不明白的是,我平时用不使用MessageBox(_T("你好"))之类的方法,而是直接用MessageBox("你好")也可以阿,看不出什么区别,所以请教_T的作用,请大哥讲得详细写,谢谢
如果说得不清楚,我可以继续描述补充我的问题

解决方案 »

  1.   

    MessageBox("你好")在Unicode版本的程序里面不能通过编译,因为MessageBoxW不能用ANSI的字符串作参数
      

  2.   

    当定义了UNICODE 或_UNICODE时
    _T() 就相当于L"",也就是说把括号里的字符变成了16B字符;
    否则它就是一个ANSII码的8B字符。
    一般我们现在都用8B符,所有就没事了。
    因为
    MessageBox也是个宏。
    在头文件中它也有以下定义
    #ifdef UNICODE
    MessageBox MessageBoxW
    #else
    MessageBox MessageBoxA
    #endif
      

  3.   

    MessageBox MessageBoxW
    应为
    #define MessageBox MessageBoxW
    下面也一样
    :))
      

  4.   

    _T可以把字符串根据你的编译参数自动转换字符串_T可以在_UNICODE宏下,将后面的字符串自动转换到unicode格式
      

  5.   

    老大,我还不是很明白阿!那我平时程序到底要不要加_T呢?
    我写的是Unicode程序,平时不加_T也可以的阿?
      

  6.   

    加_T是个好习惯,帮你减少很多Unicode和ANSI的潜在问题。
      

  7.   

    定义了UNICODE就一定要用这个宏,否则会有编译错误。因为windows的大多数与文字有关的api都是分为UNICODE和ANSI版。当定义了UNICODE,所有具有UNICODE和ANSI版的aip都会被替换为相应的版本。比如Massagebox,一般我样直接使用MessageBox这个函数名,但实际上这是个宏。这个函数有MessageBoxA(ASCII版),另一个名为MessageBoxW(宽字符版)两者的参数类型不同的。
      

  8.   

    看你的编译方法了如果是UNICODE,那么需要加_T
    如果不是,那么可以加也可不加
      

  9.   

    2000支持unicode和ansi,不加_T系统先转换unicode再传递给过去。