《Windows 程序设计》学习笔记(二)

原创 2002年06月12日 15:58:00

第二章  Unicode 介绍

 

本章简单介绍了Unicode的发展史,以及在Windows编程中的具体运用。对UNICODE的了解和运用对于进行国际化软件开发是非常重要。(特别是开发共享软件:)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Unicode在《微软英汉双解计算机百科辞典》里是这样解释的:一种16位的字符编码标准。它通过使用两个字节来表示一个字符,这样Unicode就可以用单个字符集来表示世界上几乎所有的书面语言。比较而言,8位的ASCII码就不能表示出罗马字母表中字母和可区分标记的所有组合。

Unicode的出现是计算机在全世界普及的必然结果。因为它是16位的,因此允许表示65536216次方)个字符,这对表示所有字符及世界上使用的象形文字的语言,包括一系列的数学,符号和货币的集合来说是非常充裕的。前128Unicode字符是ASCII,接下来的128Unicode字符是ASCII的扩展,其余的字符供不同语言的文字和符号使用。Unicode把全世界所有的可能用到的文字和符号到统一到了一个字符集中,但是Unicode字符串占用的内存是ASCII字符串的两倍(我觉得现在的硬件发展使这个问题已经不是很明显了。

可以用wchar_t定义Unicode字符,

wchar_t c=A’;

wchar_tWCHAR.H中是这样定义的:

typedef unsigned short wchar_t;

也就是说它是16位的无符号短整型。注意’A’在内存是以0x41,0x00的顺序保存的。还可以定义一个Unicode字符数组,看下面的程序:

#include <windows.h>

#include <iostream.h>

void main()

{

       wchar_t a = 'A';

       cout << sizeof(a) << endl;

 

       wchar_t* p = L"Hello!";

       cout << sizeof(p) << endl;

 

       static wchar_t b[] = L"Hello!";

       cout << sizeof(b) << endl;

 

}

上面的程序在VC6.0下的运行结果是:

2

4

14

其中,p是一个指针,占用4个字节。

对于C++的操作运算符sizeof,因为是在编译时进行处理的,把Unicode字符看作是16位的短整型数据,所以可以正常运行。但对于大多数C++运行期库函数(特别是以字符串作为参数的函数)只有在连接时才进行处理,函数认为Unicode字符串由单字节字符组成,因此无法正常运行,需要新版的函数支持Unicode字符。

注:上面是我的初步理解,不知对不对。如果有理解不正的地方请高手执教。

下面的例子说明了Unicode字符对C++运行期库函数的影响:

#include <windows.h>

#include <string.h>

#include <iostream.h>

void main()

{

       char* pc = "Hello!";

       cout << strlen(pc) << endl;                     //适用于单字节字符

       wchar_t * pw = L"Hello!";

//    cout << strlen(pw) << endl;                     VC6.0下编译:error     

       cout << wcslen(pw) << endl;                 //适用于Unicode字符

}

运行结果:

6

6

为了使我们的程序即适用于单字节字符(Windows98 现在还有人用它吗?)又适用于Unicode字符(Windows2000Windows XP也是吧?),可以用一些开关来进行编译时的设定。用的函数如果是ANSI  C标准的,可以通过定义UNICODE来控制;如果不是ANSI  C标准的可以通过定义_UNICODE来控制。例如下面的定义:

#ifdef UNICODE

#define MessageBox MessageBoxW              //适用于Unicode字符

#else

#define MessageBox MessageBoxA              //适用于单字节字符

#endif

同一个MessageBox函数在不同的设定中定义为不同的函数(MessageBoxWMessageBoxA)。上面的UNICODE的定义可以在VC6.0Project菜单中选择Setting,然后在C/C++中进行设定。

注:ASCII:American Standard Code for Information Interchang美国信息交换标准码

Windows编程基础学习笔记

Windows编程概述     Windows系统是一个消息驱动的操作系统,每一个事件的发生都会产生一个消息,我们通过消息来知道发生了什么事件。    Windows编程是在实现程序算法的基础上进行窗...
  • lindagod
  • lindagod
  • 2015年02月17日 08:28
  • 2828

学习编程有必要做笔记吗?

小编发现W3Cschool的程序员很喜欢记笔记,桌面永远挂着个笔记软件,笔记本也写的密密麻麻的。那么做编程真的有必要做笔记吗?怎么记呢?一起来看下知乎网友怎么说。 @花生PeA记不记笔记看情况。 比如...
  • w3cschoolcn
  • w3cschoolcn
  • 2017年04月05日 16:07
  • 1505

windows程序设计学习笔记-文本和字体

BOOL TextOut( In HDC hdc, In int nXStart, In int nYStart, In LPCTSTR lpStrin...
  • x13262608581
  • x13262608581
  • 2016年07月15日 06:24
  • 1297

Windows程序设计学习笔记二——输出文字及滚动列

关于这一部分的内容我并没有完全的弄懂,为了继续学习新的知识,我决定暂且先放一放不懂的地方,等到以后用得上的时候,再来总结学习,这应该会比纠结在这个知识点上的学习效率会高。接下来我将谈谈我自己对这一块内...
  • Rainif
  • Rainif
  • 2017年07月14日 09:37
  • 299

Windows程序设计_Chap01_起步_学习笔记

Windows程序设计_Chap01_起步_学习笔记 ――By: Neicole(2013.05.21)   01. 开篇       今天是2013.05.20,开始学习《windows程...
  • neicole
  • neicole
  • 2013年05月21日 23:26
  • 5847

MFC Windows应用程序设计——学习笔记【1】

Windows API函数根据功能大体可以分为以下三大类型
  • dongbeidami1992
  • dongbeidami1992
  • 2014年09月02日 22:33
  • 241

windows程序设计学习笔记-子窗口控件

9.子窗口控件hwndParent = GetParent(hwnd); 子窗口给父窗口发消息: SendMessage(hwndParent, message, wParam, lParam);...
  • x13262608581
  • x13262608581
  • 2016年03月17日 07:59
  • 476

windows程序设计学习笔记-设备无关位图

GIF,JPEG格式压缩了图像数据。DIB一般都不压缩。 Windows API直接支持DIB。 DIB提供了一个用来交换图像的文件格式。Windows应用程序用到的位图一般作为DIB,存在可执行...
  • x13262608581
  • x13262608581
  • 2016年07月08日 07:06
  • 602

windows程序设计学习笔记-多文档界面

多文档界面多文档界面是一个针对文档处理应用程序的一套规范。 MDI程序构成: 标题栏,菜单,边框。 客户区,在MDI中又称工作区,其中可有多个子窗口(文档窗口)。MDI程序特点: 1.文档窗口...
  • x13262608581
  • x13262608581
  • 2016年07月18日 07:43
  • 678

windows程序设计学习笔记-设备相关位图

位图和位块传输1.保存方式 位图保存方式举例: 一个三行三列位图,行0-2,列0-2. 保存时:00-02 10-12 20-22. 按行保存,从上往下。每行从左往右。2.API 2.1. ...
  • x13262608581
  • x13262608581
  • 2016年07月02日 09:45
  • 467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《Windows 程序设计》学习笔记(二)
举报原因:
原因补充:

(最多只允许输入30个字)