【Virtual C++ 3D游戏开发】前置知识 二 <Windows环境下的一些重要概念>

来源:互联网 发布:数据库系统特点的是 编辑:程序博客网 时间:2024/05/14 17:58

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

原创粉丝点击