PS:最开始想把这一部分和对Win32窗口程序的剖析放在一起,但我觉得一篇文章内容太多不利于阅读,所以将其拆分了。
本节内容:
1.Windows中的“消息”
2.Windows中的“句柄”
3.Unicode字符集
4.COM和DirectX
一.消息
1.什么是消息
通俗的说,我们对计算机或者程序发出的任何操作都会被系统翻译成一个消息,这些消息会由系统派发给适当的程序进行处理。在C/C++或JAVA这类的语言中,它被定义为一个结构体。在AS3等语言中,它被称之为一个事件(event)。当然,由于消息大多都是由于我们所进行的某些操作所产生的,比如鼠标点击、键盘按下,所以我们可以将每一次产生消息的原因都视为发生了一个事件。
2.消息队列
我们的Windows系统始终维护着一个对了,这个队列被称之为消息队列。这是一个FIFO类型的队列,所有的消息都会在产生后先进入这个队列,等待程序将其取出并进行相应的处理。
3.Windows的消息处理机制
对于消息处理机制,我们不需要进行深入的了解,这里我举个例子就可以了。比如说,我们现在点击关闭浏览器的按钮。当我们的鼠标在那个“X”按钮上按下时,Windows会把这一行为翻译成一条“关闭消息”。经过系统判断,这条消息会分发给我们的浏览器,浏览器接到这条消息后,就会销毁掉自己。总结起来,Windows环境下的消息处理机制分为如下几个步骤:
a.系统发生某些事件;
b.系统把这一事件翻译成一个消息,并将其置入消息队列;
c.应用程序得到这条消息;
d.应用程序将这条消息分发到指定的窗体;
e.由窗体处理这条消息;
一般情况下,cd两步都是在程序运行后,一直循环直到程序退出。
二.句柄
在Windows环境下,句柄的实质是一个32位的无符号整数。句柄的作用就是对任一对象进行一个独一无二的编号,这就如同我们的身份证号码,或者Unix系统中的那些id号。在Windows程序中,任一一个窗体、一个按钮、一个图标,都会具有一个句柄号。而根据类型的不同,又会有更详细的分类,如HWND单纯指一个窗体的句柄类型。
这里需要注意的是,句柄并不是指针,他只是一种标志,我们无法通过句柄直接访问其对应对象所处的内存位置。
三.字符集
准确的说,这并不仅仅是Windows下的概念。自从VS2005开始,Win32工程的默认字符集就从ASNI变成了Unicode。相比ASNI而言,Unicode具有两个相当显著的优点:
1.Unicode将所有字符编码为两个字节,兼容性得到了极大地提高。而且,面对字库极其庞大的中文,Unicode是不二的选择。
2.系统同时具有ASNI和Unicode两个版本的API函数。如果你调用了ASNI版本的函数,那么系统会先将参数转换文Unicode版本,再调用Unicode版本的API函数。但如果你使用了Unicode字符集,系统会直接调用Unicode版本的函数。这期间节约的时间积少成多,就能在一定程度上提高程序的运行效率。
四.COM和DirectX
在这里我们只需要简单的知道,DirectX是基于COM技术开发出的一套接口。基于COM开发的目的就是为了屏蔽掉硬件层的差异和干扰。在我看来,他不但提供更好的可移植性,更能让我们的代码变得规范合理。
End.
Mad.Karl 于 2012.11.12