mfc 教程
源代码在线查看: untitled-25.txt
”H6llO”
那么编译器将从ANSI字符组成该字符串。如果您接如下方式声明了字符串:
L”H6110”
那么编译器将使用Unicode字符。但是如果您使用MFC的T宏,如下所示:
.T(”Hello”)
如果定义了预处理程序符号UNICODE,那么编译器将使用Unicode字符,而如果没有定义
该预处理程序符号,那么编译器将使用ANSI字符。如果您所有的字符串常量都使用T宏
声明,那么您可以通过定义.UNICODE生成一个特殊的仅适用于 Windows NT的版本。隐式
定义这个符号将定义一个名为UNICODE(没有下划线)的相关符号,它将选择众多Windows
API函数中的Unicode版本,这些API函数具有ANSI和Unicode两种版本。当然,如果您希
望相同的可执行程序可以在这两种平台上运行,而且您不关心 ANSI应用程序在 Windows NT
下导致的性能下降,那么您可以忘掉一T宏。在本书中我将通篇使用_T,以使示例代码与字
符集无关。
使用_T宏修饰字符串常量就足以使一个应用程序完全不关心其字符集吗?回答是并
不一定。您还必须做下面的工作:
.将字符声明为TCHAR类型而不是。bar类型。如果定义了UNICODE符号,TCHAR将
求值为wchart,它是一个16位的Unicode字符。如果没有定义.UNICODE,TCHAR将
变为普通古老的。bar。
.不要使用。bar。或者 wchart。来声明 TCHAR字符串的指针,而应当使用 TCHAR
。,或者更佳的 LWhTR(指向 TCHAR字符串的指针)和 LPCThTR(指向 C。list TCHAR
字符串的指针)数据类型。
.不要认为一个字符只有8位宽。如果要将以字节表示的缓冲区长度转变为以字符
表示的缓冲区大小,可以借助sizeof(TCHAR)划分缓冲区长度。
.将对C运行时间库(例如,strcpy)中字符串函数的调用替换为Windows头文件Tchar
.h(例如,-tCSCpy)中的对应宏。
考虑下面的代码片段,其中使用了ANSI字符集:
char szMsq[256);
pwnd>GetwindoWText(szMsg, s。zeof(szMsg》;
strcat(szMsg,”ss the wwndow title”);
wessageeox(szMss);
如果将上面的代码修订为与字符集无关,就是下面的代码:
TCHAR SZMSq[256」;
pwnd>GetwindowText(szMsq, sizeof(szMsg)/ sizeof(TCHAR));