Windows桌面应用开发-字符串的使用

来源:互联网 发布:淘宝网店套现怎么弄 编辑:程序博客网 时间:2024/04/25 05:23

MSDN上英语原文 

Windows原生支持UI(用户界面)元素、文件名等等的Unicode字符串。Unicode是首选的字符编码,因为它支持所有的字符集和语言,Windows使用的是UTF-16编码的字符,其每一个字符都是一个16位值的编码,为了与8位的ANSI字符区分,UTF-16字符被称为宽字符。Visual C++编译器内置了数据类型wchart_t以对宽字符的支持,头文件WinNT.h中还定义了下列的类型定义:

typedef wchar_t WCHAR;


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

wchar_t a=L’a’;wchar_t *str=L”hello”;


下列是一些其它字符串相关的类型定义

类型定义

解释

CHAR

char

PSTR / LPSTR

char*

PCSTR / LPCSTR

const char*

PWSTR / LPWSTR

wchar_t*

PCWSTR / LPCWSTR

const wchar_t

Unicode 和 ANSI 函数

当微软推出支持UnicodeWindows,为了过渡提供了两套并行的API,一套支持ANSI字符串,另一套支持Unicode字符串。例如:以下两个函数是设置窗体标题栏的文本:

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

在系统内,ANSI版本的字符串将转换成Unicode。在Windows的头文件里定义了一个宏来解析Unicode预处理符号来决定使用的是ANSI版本还是Unicode版本。

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


MSDN,函数文档下的名称使用的是SetWindowsText,即使实际上这是宏名而不是真实的函数名。

新的应用程序应该总是调用Unicode版本。世界上许多语言需要Unicode。如果你使用ANSI字符串,它会无法本地化应用程序。ANSI版本效率比较低,因为在运行是系统必须将ANSI字符串转化为Unicode。根据你的喜好,你可以明确的调用Unicode版本,如SetWindowTextW,或是使用宏。MSDN的示例上使用的是调用宏,但是这两种形式是等价的。Windows大多数较新的API只有Unicode版本而没有ANSI版本。

TCHAR

当应用程序需要支持WindowsNTWindows95/WIndows98/WindowsME时,根据目标平台,为相同的代码编译成ANSIUnicode字符串它是相当有用的。为此,Windows SDK提供了字符串映射到UnicodeANSI的宏。这取决于目标平台

Unicode

ANSI

TCHAR

wchar_t

char

TEXT(“x”)

L”x”

“x”

示例代码:

 

SetWindowText(TEXT(“My Application”));


解析为以下操作之一:

SetWindowTextW(L”My Application”)); //宽字符字符串的Unicode函数SetWindowTextA(“My Application”); //ANSI函数

 

TCHARTEXT宏如今的用处并不大,因为所有的应用程序应该使用Unicode,然而,你可能会在较旧的代码或MSDN示例代码上看到。

微软的C运行时库的头文件定义了一组相似的宏,例如,如果为定义_UNICODE_tcslen解析为strlen,否则它解析为wcslen,这是strlen的宽字符版本。

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

 

注意: 有些头是使用预处理器符号UNICODE,另外一些使用下划线前缀_UNICODE。当你创建一个新项目时,默认情况下始终都定义两个符号。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 江铃特顺svs亮了怎么办 初中毕业证怎么办真的 初中没拿毕业证怎么办 初中毕业证没领怎么办 朗逸车电脑坏了怎么办 电车钥匙丢了怎么办 电车钥匙拧不动怎么办 汽车ecu初始化失败怎么办 汽车轻微的抖动怎么办 面包车电脑板紊乱怎么办 车子变速箱坏了怎么办 摩托车怠速不稳怎么办 汽车启动转数高怎么办 鬼火摩托车没力怎么办 摩托车油漆掉了怎么办 发动机怠速不稳怎么办 信用综合评分不足怎么办 综合评分不足是怎么办 综合信用分不足怎么办 iptv突然无信号怎么办 排气系统故障灯亮怎么办 空调冷凝器坏了怎么办 水温空调不制冷怎么办 用冷风机屋里潮怎么办 空调制热不出水怎么办 空调水管堵了怎么办 空调制冷不出水怎么办 空调出风口漏水怎么办 空调管漏水厉害怎么办 电动车车速变慢怎么办 遥控器按钮掉了怎么办 苹果6屏幕凸起怎么办 三星笔记本开机黑屏怎么办 笔记本电脑开机黑屏怎么办三星 笔记本电脑黑屏怎么办灯是亮得 九代雅阁收音机信号不好怎么办 九代雅阁电瓶亏电怎么办 17款雅阁混动汽车胎压灯怎么办 空调制冷出热风怎么办 轿车方向机漏油怎么办 车钥匙感应不灵怎么办