1.DirectDraw 这可能是Directx中最重要的技术,因为它是2D图形赖以实现的渠道,也是Direct3D构建于其上的帧缓冲层。
2.DirectDraw是由很多借口组成的。共有5个接口
I. IUnknown 所有COM对象都必须从这个基本借口派生,DirectDraw也不例外。IUnknown只包含Addref(),Release()和 QueryInterface() 三个函数,这些函数在其他接口中会被复写。
II. IDirectDraw 这是开始使用DirectDraw时必须创建的主接口对象。
III. IDirectDrawSurface 这表示你用DirectDraw创建、控制和现实的实际显示表面。
IIII. IDirectDrawPalette 支持以使用256或者更少的颜色在视频模式下处理调色板。
V. IDirectDrawClipper 用于剪切DirectDraw光栅和位图操作到一些可见显示表面的子集。
3.创建一个DirectDraw
I. 创建主DirectDraw对象并使用 QueryInterface() 来得到一个IDirectDraw7接口,或者直接使用DirectDrawCreateEx()创建一个DirectDraw7接口。
II. 使用IDirectDrawSurface7接口至少创建一个主显示表面用以绘图。
III. 用IDirectDrawPalette接口创建一个色板,用RGB三元组初试化并配置到相关显示表面中。
IIII. 如果DirectDraw应用程序要使用窗口,或者要减少位图以免溢出DirectDraw显示表面的可见边界,你至少需要创建一个裁剪器并将其尺寸设置为可见窗口的范围。
V. 在主显示表面上绘图。
4创建DirectDraw对象的三种方法
I. 利用 QueryInterface() 对版本经行升级
LPDIRECTDRAW lpdd = NULL; LPDIRECTDRAW lpdd7 =NULL; if(FAILED(DirectDrawCreate(NULL,&lpdd,NULL))) { //error } if(FAILED(lpdd->QueryInterface(IID_IDirectDraw7,(LPVOID *)&lpdd7))) { //error }
ps:接口标示符格式
IID_IDirectCD
其中字符C表示组件:Draw代表DirectDraw,Sound代表DirectSound,Input代表DirectInput,以此类推。字符D是一个从2~N的数字,代指你需要接口。
II.调用底层的COM创建IDirectDraw7
if(FAILED(CoInitialize(NULL))) { //error } if(FAILED(CoCreateInstance(&CLSID_DirectDraw,NULL,CLSCTX_All,&IID_IDirectDraw7,&lpdd7))) { //error } if(FAILED(IDirectDraw7_Initialize(lpdd7,NULL))) { //error } CoUninitialize();
III.使用 DirectDrawCreateEx() 函数创建 IDirectDraw7
LPDIRECTDRAW lpdd; DirectDrawCreateEx(NULL,(void *)&lpdd,IID_IDirectDraw7,NULL);