DirectDraw7学习笔记(1)---基本概念

注:如果有朋友直接拷贝或转载引用我的文章,我并不反对,也无须得到我的同意,但请在转载引用的时候注明作者.

作者:蒋志强

前言

我必须首先声明的是我是一个初学者(菜鸟),我自己也是在边学边写,正如文章的题目所说,这些文章实际上是我自己的学习笔记.我想这样做有不少的好处,首先可以通过自己的理解归纳再重新复习巩固一下所学的知识,其次可以便于自己以后复习(这也就是做笔记的意义所在),其三或许对其他的初学者会有点帮助.我的文章尽力说的清楚明白,让和我一样的初学者可以没有障碍的理解.既然是学习笔记,自然会用到其他学习资源的内容,在直接引用的时候我会声明其出处作者.如果有朋友直接拷贝或转载引用我的文章,我并不反对,但请在转载引用的时候注明作者.

关于DirectX的基本常识

DirectX是微软推出的一套在Windows平台上开发软件的SDK工具.实际上他提供了一系列的函数调用(严格意义上来说是提供了接口中方法),让程序员可以在自己的程序中使用,来完成一系列的编程工作.在Windows平台下,我们已经有了丰富的API函数供程序员们使用,这些API函数可以完成我们的各种任务.但是API函数设计的出发点是为编写常规的应用程序准备的,并没有太多的考虑到游戏以及其他效率要求较高的多媒体交互应用的需要,而微软推出的DirectX则正是针对这样的需求的,所以他在这类应用中工作得比传统API要更加出色,并且在这些领域应用得十分广泛.

关于DirectX的组成及与COM的关系

DirectX由多个部分组成,几乎含概了游戏开发及其他多媒体交互应用程序的所有需要.DirectX包括了针对2D图形DirectDraw,针对3D图形的Direct3D,针对用户输入的DirectInput,以及网络对战,音效等方面的DirectPlay,DirectSound,DirectShow等部分.程序员可以根据自己程序的需要使用其中的一个或多个部分,我针对相对容易的2D部分的DirectDraw进行学习.

DirectX自微软推出以来在不断的更新完善,到我写文章的时候DirectX的最新版本已经是9.0了.DirectX中的DirectDraw部分在7.0版本以后就没有更新了,在8.0版本中DirectDraw和Direct3D被合并为了Direct Graphics.虽然DirectX的最新版本是9.0但这并不妨碍我们学习7.0版本中的DirectDraw,关键就在于DirectX是基于COM模型(有关COM的内容在本文下面将马上讲解)构建的,所以在9.0中我们还是可以使用DirectDraw的7.0版本,这也是COM的魅力所在之一,完全对以前的兼容,可以让程序员放心的学习,而不必担心在以后DirectX版本更新后以前学的就无法再使用了.

COM是Component Object Model的缩写,就是组件对象模型的意思.他是一种模型或者说规范,按照这种规范创建的东西就叫做COM组件,DirectX的各个组成部分都是COM组件.COM模型中一个非常重要的概念是接口.有JAVA或C#编程经验的朋友可以很好的理解接口,在C++中似乎没有接口的概念,但接口实际上还是存在的.在C++中存在只有方法定义而没有方法实现的类,这种类不能产生实例,只可以用来继承,就是虚基类.其实C++中的虚基类就是接口,COM模型中就是通过接口提供各种方法供程序员使用.接口中的方法只有定义没有实现,方法的实现并没有以源文件的形式提供,而是以可直接执行的二进制的DLL(Dynamic Link Libraries动态链接库)提供,这样只要提供*.lib和相应语言的头文件就可以在不同的语言中使用DirectX或者说COM组件了.*.lib是导入库文件,他提供了引用DLL中的内容所需要的信息,而头文件提供了定义,以便在相应的语言中使用,具体实现存在于DLL中,以便于实现语言无关性.由于COM组件的具体实现在DLL中,所以要使用COM组件,必须先要在操作系统上装上相应的DLL文件.其实运行使用了DirectX的程序都要求安装DirectX Runtime,安装DirectX Runtime其实就是把DirectX的DLL文件复制到系统目录下.或者你安装微软的DirectX SDK开发工具包,他不仅包括了全部的DLL还有用于开发的头文件,*.lib文件,帮助文档以及程序示例.如果只是运行DirectX的程序,并不是要做开发只要装上DLL就可以了.COM组件是在程序运行的时候才动态链接的.

在创建了一个COM对象后,就可以使用他的接口中的各种方法了.在DirectDraw的使用中,我们只要创建了一个DirectDraw对象也就可以使用他的各种接口中的各种方法了.学习DirectDraw在一定程度上也可以理解为学习使用DirectDraw对象中的各种接口提供的方法,并综合运用这些方法.在COM组件升级以后,在以前的组件中加入了新的接口及方法,但COM模型规定新的COM组件必须实现旧的接口和方法,这样就使得COM组件或者特别说DirectX的新版本对旧的兼容.新的组件继承旧组件实际上是通过C++的虚基类的继承实现的,而父类的指针可以指向子类的对象,这就是在创建的新版本的组件对象中可以使用旧接口和方法的真正原因.COM的设计者就是通过C++的虚类来实现COM组件的,只是COM组件的创建并不要求一定要用C++,只要创建的COM组件在二进制上与C++创建的一致就可以.因为COM组件的具体实现是二进制的DLL,而并不是源文件.

小节

至此,只简要介绍了COM的基本概念,由于DirectX是基于COM模型的,所以了解COM对学习理解DirectX很重要,但由于我们只是使用DirectX而不是设计COM组件,有概念的理解就可以学习DirectX了(当然能够自己写COM组件会更好).由于肚子实在饿了,以后再继续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值