DirectDraw教程

上传人:野鹰 文档编号:1090566 上传时间:2017-05-27 格式:TXT 页数:9 大小:15.23KB
返回 下载 相关 举报
DirectDraw教程_第1页
第1页 / 共9页
DirectDraw教程_第2页
第2页 / 共9页
DirectDraw教程_第3页
第3页 / 共9页
DirectDraw教程_第4页
第4页 / 共9页
DirectDraw教程_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《DirectDraw教程》由会员分享,可在线阅读,更多相关《DirectDraw教程(9页珍藏版)》请在金锄头文库上搜索。

1、DirectDraw编程基础 裂开本文面向有几个月学习编程经历的初学者:看过C+的教程,看的懂基本的C+语法;有点点VC使用经验,知道怎么去组建一个工程;理解一些windows编程的基本概念,比如窗口、消息循环等;还有,不懂的地方会去查资料:)。看过几本关于DirectDraw的书,这些书都不错,在此感谢她们的作者。美中不足的是这些书的部分起点较高,虽然我们仍然能够清晰的理解一些概念,但在组织这些文件上会有不少困惑。在此我重申一下书中的概念,也借此梳理一下自己的思路。废话少说,言归正传。首先说一些不可不说的 。我 们不可不 ,是 这些 也 基础,高 们 这些 的作用。作 一个 ,我 程 的 组

2、织方法,比 几个APIs 一些。Now lets begin:一个 程 , 程, 组织程 文件的能。 currency1说,我建“部的currency1理 分fi 的程 ,不fl 这个在思 。这是个的习”,然也有于我们 编程的思方法。下面currency1看一个概 的程 的程 不currency1。)么,如用上面的程currency1 建我们的程 我们经知道一些windows编程方面的 ,也 还比较解MFC。我们这不 用MFC, 有用的 ,但 我们编 currency1说, 是 。, 说。 然 用windowsAPI,可 建 个文件WinMain.cppcurrency1理windows编程中

3、有关窗口的一些 。这 ,我们在文件中 建窗口,理基本消息比如“ esc”等),程 等。 过程中窗口的消息是不是也 在这理 然,不过 中的窗口不是windows窗口,部分 DirectDrawcurrency1,么我们 在WinMain.cpp中 用关的 currency1理。这么看currency1,在WinMain.cpp中几 个程,不错, 程 的 个 , 的程 一个 。 有,么下一,GameMain.cpp ,这个fl 用currency1 个 的个组件, 部分工作, 初 化,中消息循环, 。的才华在这儿currency1情的发挥。一般, 程 会有几个固定的组件的:,音乐,信息输入。在Di

4、rectX中 很方便的组件DirectDraw,DirectSound和DirectMusic,DirectInput。的我们建 MyDirectDraw.cpp,MyDirectAudio.cpp,MyDirectInput.cppcurrency1部分组件的功能。然,这3部分都是 GameMain.cpp服务的,被GameMain.cpp 用。么我们可 看我们的程 包 的文件 包含关系 :图表不currency1,555)程 文件怎么去组织,由这个表可 看currency1。这么一看,我们发现,WinMain.cpp像是一个投资者, 开发 ,他 关注 个项目总的进程,不关注细节。GameM

5、ain.cpp像个项目负责人, 个项目的细节过程由他currency1策划,currency1,向上与WinMain.cpp交互,currency1 项目,向下 MyDirectDraw.cpp,MyDirectAudio.cpp,MyDirectInput.cpp之间的工作。MyDirectDraw.cpp,MyDirectAudio.cpp,MyDirectInput.cpp这三个家伙是员工,负责自的工作, 的功能给GameMain.cpp。组织程 是这么个思路,然具 具分fi。么我们下面currency1开 看DirectDraw部分。首先,做准备工作,安 DirectX SDK,在VC

6、中添加dxguid.lib和ddraw.lib本currency1不说这个,看到有个教程, 少加dxguid.lib,郁闷我一阵子,害人颇深感 )这 ,directdraw程 才能通过编译。 一下,dxguid.lib中定义DirectX中会用到的所有全局句柄,ddraw.lib是DirectDraw使用的函数库。下面可 代码,这我们然fl 看MyDirectDraw.cpp怎么 此,我选几个源代码,做参考研究, 们会与本文一起打包。我还是习”先从 上鸟瞰一下:一般,在MyDirectDraw.cpp(注意不 忘记引用头文件ddraw.h)中至少 有两部分:初 化和结束。先看初 化,所谓初 化

7、无非是个准备工作,需 的 定义 建currency1摆在 边 备后用。currency1看看初 化函数intMyDirectDrawInitvoid)怎么 。首先定义一个指向DirectDraw 象的指针, 建DirectDraw 象,查询 获取最 的DirectDraw 口, 作等级, 。通过这些骤可建一个黑色的屏幕,也是说经开辟我们需 的空间,然DirectDraw程 的初 化不会这么简单。 操作2d图形,我们还 建fl 面和 面 屏 面,总之 需 , 是需 在操作 需 准备的 都可 在这。么结束 int MyDirectDrawShutvoid) 我们开辟的 ,一般 fl 面指针,和Di

8、rectDraw 口等。是这么个 子,go on,细一点, 先定义指针:LPDIRECTDRAW lpDDraw_temp;代表 个系 建 象: if (FAILED(DirectDrawCreate(NULL, &lpDDraw_temp, NULL)MessageBox(NULL,TEXT(Direct Draw Create error!),TEXT(Wrong!),MB_OK);return(0);这用一个FAILED currency1 是 建 功,这可 我们 错 。函数DirectDrawCreate(NULL, &lpDDraw_temp, NULL) 建, 一个参数是 的全局

9、一,这null表目 的 备; 个参数用currency1 建currency1的DirectDraw 象地 ,这用&lpDDraw_temp ; 三个参数不 ,给 null,不 的话。查询DirectDraw 口:if(FAILED(lpDDraw_temp-QueryInterface(IID_IDirectDraw7, (LPVOID *)&lpDDraw7)MessageBox(NULL,TEXT(DirectDraw QueryInterface error!),TEXT(Wrong!),MB_OK);return(0);通过QueryInterface()方法currency1获取

10、口,这是IDirectDraw7不是IDirectDraw8,指向IDirectDraw7的指针 在lpDDraw7中,这是个全局,可 这 定义LPDIRECTDRAW7 lpDDraw7NULL;便说一下,一般情下是知道使用的 口的,这和SDK有关,所 说这一不是currency1的。作等级: if (FAILED(lpDDraw7-SetCooperativeLevel(main_window_handle, DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX | DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)MessageBox(NULL,T

11、EXT(DirectDraw SetCooperativeLevel error!),TEXT(Wrong!),MB_OK);return(0);定这个程 和windows的关系, 向windows申“所用资源,比如 全屏,等。 一个参数是fl窗口句柄,是WinMain)中 建的个, 个参数有几个 ,用的用法如下:DDSCL_FULLSCREEN:全屏 ,currency1和DDSCL_EXCLUSIVEfi使用DDSCL_EXCLUSIVE:“fl级 ,currency1和DDSCL_FULLSCREENfi使用DDSCL_ALLOWREBOOT: 系 ctrl+alt+del“消息这很有用

12、)我,这三个够用,他的先不用 :if(FAILED(lpDDraw7-SetDisplayMode(800, 600, 16,0,0) MessageBox(NULL,TEXT(DirectDraw SetDisplayMode error!),TEXT(Wrong!),MB_OK);return(0);中 使用的 可能和用 不一 , 在此 一 SetDisplayMode)使用的 , 的 三个参数很 懂, 个,用0表使用 的” , 个参数这是0,有书上说currency1用DDSDM_STANDVGAMODE可 理解, 是不知道这个0么意思,我是default的意思。到此 ,我经 建curr

13、ency1我们需 的空间, 后, 我们 fl的 高, 初 化函数,now看看结束函数:口: if (lpDDraw7)lpDDraw7-Release();lpDDraw7 = NULL;后还 fl 面, 面等,需 注意一点的是一定 申“的资源,这是个习”, 注意的一点是先 建的一定 后 , 后 建的可能是在先 建的环下工作的。到此 ,我们 是做最基础的准备工作,么还都不能做 做点么会,说点不 不说的话:么我们currency1看看色。有关色,分这么几,256色8 的),16 色,24 和32 。256色 很少用,16 目 还是fl,所 我们 重看一下16 色,通16 色有两 :5.5.5和5

14、.6.5,一般用RGB表法表。中:5.5.5 ,最高 Alpha ,表是不是, 15 表色, 5 ,这 可 表32786色。通过 define _RGB16BIT555(r,g,b)(b%32)+(g%32)CreateSurface(&ddsd, &lpDDprimary, NULL)MessageBox(NULL,TEXT(DirectDraw Create primary Surface error!),TEXT(Wrong!),MB_OK);return(0);/ ddsCaps.dwCapsddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;/ fl 面 后 if (FAILED(lpDDprimary-GetAttachedSurface(&ddsd.ddsCaps, &lpDDback)MessageBox(NULL,TEXT(DirectDraw Create back Surface error!),TEXT(Wrong!),MB_OK);return(0);在这,我们 定义几个全局:extern LPDIRECTSURFACE7 lpDDprimary;extern LPDIRECTSURFACE7 lpDDback;extern DDS

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号