Windows、字符集和_T宏

来源:互联网 发布:360文件恢复软件下载 编辑:程序博客网 时间:2024/04/28 12:51

Microsoft Windows98和Microsoft Windows NT 使用两种不同的字符集来构成字符和字符串。

Win98 及其以前 的版本使用 8位的ANSI字符集,这类似于许多程序员都熟悉的ASCII字符集。

Win NT和win2000使用16位的Unicode字符集,它是ANSI字符集的一个超集。Unicode适用于国际市场上销售的应用 程序,因为它包含各种各样来自非U.S字母表的字符 。

使用ANSI字符集编译的程序可以在Windows NT和 Windows 2000上运行,但Unicode程序运行起来要稍微快点。因为Windows NT和 Windows 2000不需要对每个字符进行ANSI到Unicode的转换。Unicode应用程序不能在Win98运行,除非你将每个传送到Windows的字符进行从Unicode到ANSI的转换。

在编译应用程序时,你可以选 其一进行编译。如果你想在win98和win2000上部署,它可能需要你将字符串变成与字符集无关的。然后,通过对工程的生成 设置进行简单的更改或者在头文件中添加#define,你可以告诉编译器是产生ANSI版本还是产生Unicode版本。如果你将按如下方式将字符串常量进行编码:

“Hello”

那么编译器将从ANSI字符组成该字符串。如果你按如下 方式声明了字符串:

L“Hello”

那么编译器将使用UnicodeI字符.但是如果你使用MFC的_T宏,如下所示:

_T("Text")

如果定义了预处理程序符号_UNICODE,那么编译器将使用Unicode字符,而如果没有定义该处理程序符号,那么编译器将使用ANSI字符。

如果你所有的字符串常量都使用_T宏声明,那么你可能通过定义_UNICODE生成 一个特殊的仅适用Win NT的版本。隐式定义这个符号 将定义 一个名为UNICODE(没有下划线),它将选 择众多WIndows  API函数中的Unicode版本,这些API函数具有ANSI和Unicode  两种版本。

使用_T宏修饰字符串常量就足以使一个应用程序完全不关心其字符集吗?回答是并不一定。你必须还要做以下工作:

  • 将字符声明为TCHAR类型而不是char类型。如果定义了_UNICODE符号,TCHAR将求值为wchar_t,它将是一个16位Unicode字符,如果没有定义,TCHAR将是普通的char类型
  • 不要使用char*或wchar_t*来声明TCHAR字符串的指针,应使用TCHAR*.或者更佳的LPTSTR(指向TCAHR字符串的指针)或LPCTSTR(指向const TCHAR字符串的指针)数据类型。
  • 不要认为一个字符只有8位宽。 如果要将以字节表示 的缓冲区长度转变为以字符表示的缓冲区长度,可以借助sizeof(TCHAR)划分缓冲区长度 。、
  • 将对C运行时间库(例如,strcpy)中字符串函数的调用替换为windows头文件Tchar.h(例如_tcscpy)中对应 的宏。
考虑以下 代码,其中使用了ANSI字符集:
char szMsg[256];pWnd->GetWindowText(szMsg,sizeof(szMsg));strcat(szMsg,"is the window title");MessageBox(szMsg);

如果将上面的代码改成也字符集无关,就是下面的代码:

TCHAR szMsg[256];pWnd->GetWindowText(szMsg,sizeof(szMsg)/sizeof(TCHAR));_tcscat(szMsg,_T("is the window title"));MessageBox(szMsg);

摘抄自《MFC  Windowt程序设计》(第二版)ISBN:978-7-302-15042-8


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3岁半宝宝认字怎么办 上课注意力不集中老是发呆怎么办 海绵宝宝吃了会怎么办 宝宝误吞李子核怎么办 24个月宝宝不愿意说话怎么办 孩子凉着肚子吐怎么办 教宝宝说话不会说怎么办 2岁宝宝语言退化怎么办 两周宝宝嗓子哑怎么办 幼儿园孩子上课爱说话老师怎么办 一岁宝宝不会爬怎么办 孩子说话不太清楚怎么办 十一个月宝宝不爱吃饭怎么办 14个月宝宝不爱吃饭怎么办 一岁宝宝喜欢哭怎么办 4岁儿童不会说话怎么办 8个月宝宝37.5度怎么办 8个月婴儿37.5度怎么办 5个月宝宝38度怎么办 5个月宝宝发烧怎么办 五个月小孩38度怎么办 宝宝3岁还不会说话 怎么办 两岁宝宝流口水厉害怎么办 两周宝宝不说话怎么办 两岁宝宝说话有点口吃怎么办 一周岁的宝宝脾气不好怎么办 九个月的宝宝脾气不好怎么办 两岁宝宝脾气不好怎么办 2岁宝宝脾气不好怎么办 3岁宝宝脾气不好怎么办 脾气不好吓到宝宝了怎么办 四个月宝宝脾气不好怎么办 5岁说话不清楚该怎么办 小孩快上幼儿园了不怎么说话怎么办 四岁宝宝吐字不清楚怎么办 孕28周胎儿腿短怎么办 b超显示腿短怎么办 2岁多宝宝不愿意说话怎么办 6岁儿童咬字不清怎么办 两岁宝宝爱看电视怎么办 两岁宝宝喜欢看电视怎么办