Windows桌面应用程序(1-2-1-3rd) 使用字符串

来源:互联网 发布:新浪pop3服务器 端口 编辑:程序博客网 时间:2024/05/21 05:06

Windows本身支持用于UI元素,文件名等的Unicode字符串。Unicode是首选的字符编码,因为它支持所有的字符集和语言。Windows使用UTF-16编码表示Unicode字符,其中每个字符都被编码为16位值。UTF-16字符被称为字符,以区别于8位ANSI字符。Visual C++编译器支持宽字符的内置数据类型wchar_t。头文件WinNT.h也定义了下面的typedef

typedef wchar_t WCHAR;

您将在MSDN示例代码中看到两个版本。要声明一个宽字符或宽字符的字符串,将L放在字面上。

wchar_t a=L'a';wchar_t *str=L"hello";

以下是您将看到的其他一些与字符串相关的typedef:

Typedef 定义 CHAR char PSTRLPSTR char* PCSTRLPCSTR const char* PWSTRLPWSTR wchar_t* PCWSTRLPCWSTR const wchar_t*

Unicode和ANSI函数
当Microsoft向Windows推出Unicode支持时,通过提供两组平行的API(一组用于ANSI字符串而另一组用于Unicode字符串)缓解了转换。例如,有两个函数可以设置窗口标题栏的文本:

  • SetWindowTextA采用ANSI字符串。
  • SetWindowTextW需要一个Unicode字符串。

在内部,ANSI版本将字符串转换为Unicode。Windows头文件还定义了一个宏,在预定义符号UNICODE被定义时解析为Unicode版本,否则定义为ANSI版本。

#ifdef UNICODE#define SetWindowText SetWindowTextW#else#define SetWindowText SetWindowTextA#endif 

在MSDN中,函数被记录在SetWindowText的名字下,尽管这实际上是宏名,而不是实际的函数名。
新的应用程序应该总是调用Unicode版本。许多世界语言都需要Unicode。如果您使用ANSI字符串,将不可能本地化您的应用程序。ANSI版本效率也不高,因为操作系统必须在运行时将ANSI字符串转换为Unicode。根据您的偏好,您可以显式调用Unicode函数,如SetWindowTextW,或使用宏。MSDN上的示例代码通常会调用宏,但这两种形式完全相同。Windows中大多数较新的API只有一个Unicode版本,没有相应的ANSI版本。
TCHARS
当应用程序需要同时支持Windows NT以及Windows 95,Windows 98和Windows Me时,根据目标平台编译ANSI或Unicode字符串的代码是很有用的。为此,Windows SDK提供了将字符串映射到Unicode或ANSI的宏,具体取决于平台。

宏 Unicode ANSI TCHAR wchar_t char TEXT(“x”) L”x” “x”

例如,下面的代码:

SetWindowText(TEXT("My Application"));

解析为以下之一:

SetWindowTextW(L"My Application");// Unicode function with wide-character string.SetWindowTextA("My Application");// ANSI function.

TEXTTCHAR宏今天不太有用,因为所有的应用程序都应该使用Unicode。但是,您可能会在旧代码和某些MSDN代码示例中看到它们。
Microsoft C运行库的头文件定义了一组类似的宏。例如,如果_UNICODE未定义,_tcslen解析为strlen;否则它解析为wcslen,这是strlen的宽字符版本。

#ifdef _UNICODE#define _tcslen wcslen#else#define _tcslen strlen#endif 

注意:一些头文件使用预处理器符号UNICODE,而另一些使用带有下划线前缀的_UNICODE。总是定义这两个符号。Visual C++在创建新项目时默认将它们设置为它们。
下一个
什么是窗口?


原文链接:Working with Strings

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 灌南吧 灌南县 滴滴出行股票代码 滴滴股票 灌县 灌县古城 灌县老妈砂锅串串团购 灌县老妈砂锅串串总店 灌口 灌口姜母鸭 灌口蛋糕店 厦门灌口房价 厦门灌口招聘 集美灌口酒店 灌口花店 相声灌口报菜名 灌口房屋出租 正宗灌口姜母鸭的做法 灌夫 环氧树脂胶灌封胶 电子灌封胶配方 沥青灌封胶 单组份灌封胶 灌封胶使用方法 防水电源灌封胶 电子导热灌封胶 环氧树脂灌封胶 灌封胶厂家 电子电器灌封胶 聚氨酯灌封胶 聚氨酯灌封胶配方 led透明灌封胶 树脂灌封胶 环氧树脂灌封胶价格 环氧树脂灌封胶水 环氧树脂灌封胶配方 环氧灌封胶 灯条灌封胶 封尾灌装机 金属灌封胶 灌封胶价格