1、DirectX组件

DirectX是基于COM实现的,比系统自带的GDI和MCI更快、更稳定,其包括许多组件,如:

●DirectDraw(DirectX 8.0以上的版本不包含)

●DirectSound

●DirectSound3D

●DirectMusic

●DirectInput

●DirectPlay

●DirectSetup

●DirectShow

●Direct3DRM

●Direct3DIM

●DirectX Graphics(融合了DirectDraw和Direct3D)

●DirectX Audio(融合了DirectSound和DirectMusic)

DirectDraw:在DirectX 8.0版本里DirectDraw被移除了,它将DirectDraw和Direct3D合成了DirectX Graphics,不过仍可以使用。是控制视频显示的主要图形渲染和2D位图引擎。

DirectSound:声音组件,只支持数字化的声音,不支持MIDI。DirectSound3D是3D声音组件。

DirectMusic:声音音乐组件,支持MIDI。现在DirectMusic和DirectSound被合并成了DirectX Audio。

DirectInput:处理输入设备,如鼠标、键盘、游戏控制杆、空间定位球等。

DirectPlay:处理网络方面的事情。

DirectShow:播放流媒体组件。现在移到了Windows SDK。

Direct3DRM:Direct3D的保留模式。

Direct3DIM:Direct3D的直接模式。

2、应用DirectX COM组件

COM对象实际上是一个或一套实现了大量接口的C++类,一个接口就是一套函数。

3、不同版本的DirectX

DirectDraw 1.0接口指针数据类型:LPDIRECTDRAW  lpdd = NULL;

DirectDraw 7.0接口指针数据类型:LPDIRECTDRAW7  lpdd = NULL;

DirectDrawCreate()函数可以创建一个DirectDraw COM对象,并得到一个初始的接口指针

HRESULT WINAPI DirectDrawCreate(_In_  GUID FAR* lpGUID, // 视频显卡驱动的GUID(全局唯一标识符),一般设为NULL表示系统默认的硬件_Out_ LPDIRECTDRAW FAR* lplpDD, //返回的接口_In_  IUnknown FAR* pUnkOuter //高级功能,一般设为NULL
); 

eg:

DirectDrawCreate(NULL, &lpdd, NULL);

然而DirectDrawCreate()是DirectDraw 1.0版本定义的函数,获得的接口指针类型是LPDIRECTDRAW ,如果要在高于1.0版本里使用,有两种方法:

1、利用QueryInterface()函数,eg:

      LPDIRECTDRAW  lpdd = NULL;LPDIRECTDRAW7  lpdd7 = NULL;DirectDrawCreate(NULL, &lpdd, NULL);lpdd->QueryInterface(IID_IDirectDraw7, &lpdd7);lpdd->Release;lpdd = NULL;

需要注意的地方是DirectDraw 7.0的接口常量IID_IDirectDraw7,通常DirectX接口标识符(IID)采用以下格式:IDD_IDirectCD。其中C表示组件,如Draw表示DirectDraw,Sound表示DirectSound;D是一个2—n的数字,表示版本。

2、直接使用DirectDraw 7.0中的DirectDrawCreateEx()函数。

   HRESULT WINAPI DirectDrawCreateEx(_In_   GUID FAR *lpGUID, // 视频显卡驱动的GUID,一般设为NULL表示系统默认的硬件_Out_  LPVOID *lplpDD, // 这是返回的接口_In_   REFIID iid, // 请求接口相对应的ID_In_   IUnknown FAR *pUnkOuter //高级功能,一般设为NULL);

eg:

     LPDIRECTDRAW7  lpdd = NULL;DirectDrawCreateEx(NULL, (void**)&lpdd, IID_IDirectDraw, NULL);

3、利用底层COM函数,eg:

//初始化COM:加载COM库,如果它们没有被加载的话
if(FAILED(CoInitialize(NULL)))
{//error...return;
}//实例化DirectDraw对象,并获得指定的接口指针
if(FAILED(CoCreateInstance(&CLSID_DirectDraw, NULL, CLSCTX_ALL, &IID_DirectDraw7, &lpdd7)))
{//error...return;
}//初始化COM对象
lpdd7->Initialize(NULL);...//释放对COM的使用
CoUninitialize();

《windows游戏编程大师技巧》第五章:DirectX基础知识和令人生畏的COM相关推荐

  1. 开始利用CSDN做学习笔记,从windows 游戏编程大师技巧和3D游戏编程大师开始

    利用两个月的空余时间将windows 游戏编程大师技巧和3D游戏编程大师技巧看了一遍. 第一遍读的并不深入,代码也没有仔细研究.特别是3D下册,基本只是草草浏览了一遍而已.这一遍是为了对整体有个印象和 ...

  2. 《Windows游戏编程大师技巧》(第二版)第1章(上)

    第1章 学海无涯 "Oh, you want some too?!?" -Hudson, Aliens Windows 编程就像是一场由来已久并还在进行着的战争.尽管游戏程序员曾经 ...

  3. 《Windows游戏编程大师技巧》(第二版)第2章

    因此几乎是一夜间,Windows 95就改变了整个计算机行业.的确,目前还有一些公司仍然在使用Windows 3.1(你能相信吗?),但是Windows 95使得基于Intel的PC成为除游戏之外的所 ...

  4. Windows游戏编程大师技巧(一)

    第一章 无尽之旅 Windows编程是一场由来已久并还在进行着的战争.开始时,游戏程序拒绝Windows平 台,但正如Borg所言:"反对无效......",我也赞同这一观点.本章 ...

  5. 《Windows游戏编程大师技巧》(第二版)第11章

    第三部分:核心游戏编程   第11章 算法.数据结构.内存管理和多线程   第12章 人工智能   第13章 游戏物理   第14章 文字时代   第15章 综合运用:编写游戏! 第11章 算法.数据 ...

  6. 《Windows游戏编程大师技巧》(第二版)第1章(下)

    实例:FreakOut 在沉溺于所讨论的有关Windows.DirectX 和3D 图形之前,应当暂停一下,先给你看一个完整的游戏--虽然简单了一点,但毫无疑问是一个完整的游戏.你会看到一个实际的游戏 ...

  7. Windows游戏编程大师技巧第二版学习笔记之第一章 实验补充

    前面记录的一下看书中的重点,编程还是要动手,下面就来动手试试,这里选择VC6.0编译器 这里先来配置游戏编程环境,原书中的dx81sdk_full.exe一共是1百多MB,其实没必要整那么多,看我在我 ...

  8. 《Windows游戏编程大师技巧》三、Windows高级编程

    Windows编程很绝的地方在于:你不用了解太多细节,就可以完成很多工作. 使用资源 资源就是你的程序代码结合在一起的多块数据,可以被程序本身在运行时加载. 资源应当也放在程序的.EXE文件中的原因是 ...

  9. Windows游戏编程大师技巧之三角形填充

    一.三角形的种类 三角形一般可以分为如下的四种类型(这四种类型是对于计算机来说的,不是数学意义上的分类): 平顶三角形:就是在计算机中显示的上面两个顶点的Y坐标相同. 平底三角形:就是在计算机中显示的 ...

最新文章

  1. My cnblogs's first day
  2. 初识机器学习——吴恩达《Machine Learning》学习笔记(八)
  3. 【编译原理】文法分类
  4. 鸿蒙系统-手机-JS FA(Feature Ability)调用Java PA(Particle Ability)
  5. 微软 Small Basic 简体中文版 已经发布了
  6. 以太网抓包数据报头长度
  7. 无语!JDK 8 中的 HashMap 依然会死循环…
  8. PAYPAL使用虚拟信用卡验证的技巧
  9. Oracle19c下载安装和配置教程
  10. PS如何调整图片像素大小
  11. Android 修改AlertDialog原生setPositiveButton的字体颜色背景颜色大小边距位置
  12. SpringBoot集成身份证认证
  13. 【兴趣】QQ音乐VS网易云音乐竞品分析
  14. 人生短暂,持之以恒地做一件事情就会成功
  15. 每月一书(202202): 《从零开始做自媒体》
  16. ac3168无线网卡驱动下载_英特尔面向Windows 10推出无线网卡驱动程序和图形命令中心应用更新...
  17. An overview of color constancy algorithms论文笔记
  18. TRS 中的position embedding
  19. 基于单片机的电子秤(计价/播报)电路设计(#0223)
  20. 滴水逆向三期实践10:动态链接库

热门文章

  1. 简单的LED交替闪烁程序
  2. 四个漂亮CSS样式表
  3. win7记事本如何转换html,Win7打开记事本显示乱码是为什么?怎么才能正常?
  4. 简述c++语言的特点(优点)
  5. 汇编指令学习(AND,OR,XOR,NOT)
  6. 错误模块名称: KERNELBASE.dll 问题记录
  7. 在生成式AI的崛起中,百度“先下一城”
  8. apache iotdb_清华数为工业互联网时序数据库Apache IoTDB亮相2019工业互联网峰会
  9. c语言1106回文数,Codeforces 1106 简要题解
  10. 单片机音乐盒c语言源程序,51单片机八音盒源程序(汇编语言)