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

本文介绍了Windows编程中的核心概念,包括消息、句柄、Unicode字符集以及COM和DirectX技术。详细解析了消息如何在Windows系统中传递及处理,句柄在资源管理中的作用,Unicode字符集的优势,并简单介绍了DirectX的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

C++编程实例100篇》是一本深入实践、极具价值的编程教程,它针对C++编程语言提供了丰富的实例,旨在帮助读者更好地理解和掌握C++的各项特性与编程技巧。这本书的经典之处在于它将理论与实践相结合,通过100个精心设计的编程实例,覆盖了C++的各个核心领域,包括基础语法、面向对象编程、模板、异常处理、STL(标准模板库)等。 我们来探讨C++的基础语法。C++是C语言的增强版,它保留了C语言的高效性和灵活性,并引入了类、对象和继承等面向对象编程概念。基础语法包括变量声明、数据类型、运算符、控制结构(如if语句、for循环、while循环)、函数的定义和调用等。在实例中,你可能会遇到如何编写简单的程序,如计算两个数的和,或者实现一个简单的猜数字游戏。 C++的面向对象编程是其一大特色。通过类和对象,你可以构建复杂的软件系统。类是对象的蓝图,它定义了对象的属性和行为。实例化一个类,就是创建一个具体的对象。继承允许你创建新的类,这些类从现有的类派生,共享其属性和方法,同时可以添加新的功能。多态性是面向对象的另一个关键特性,它使得不同类型的对象可以对同一消息作出不同的响应。这些概念在实例中会以各种形式展现,例如设计一个图形界面的类层次,或实现一个简单的模拟游戏。 接下来是模板,C++的模板功能让代码更加通用,可以处理不同类型的数据。模板分为函数模板和类模板,前者可以创建泛型函数,后者可以创建泛型类。通过模板,你可以编写出高效且灵活的代码,比如实现一个通用的排序算法。 异常处理是C++中用于处理程序运行时错误的机制。当程序出现异常情况时,可以抛出一个异常,然后在适当的点捕获并处理这个异常。这使得代码能够优雅地处理错误,而不是让程序崩溃。实例中可能会有涉及文件操作或网络通信时可能出现的异常处理示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值