java directdraw_《Windows游戏编程技巧大师》就DirectDraw而创建DirectDraw知识笔记

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光栅和位图操作到一些可见显示表面的子集。

635efa7fae49d99540b6cc94bca321d0.png

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);

版权声明:本文博主原创文章,博客,未经同意不得转载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

weixin_39811842

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值