IDirectDraw接口 分类: VC++ ...

创建一个主DirectDraw对象,并使用QueryInterface()方法来得到最新的IDirectDraw7接口,或是直接用DirectDrawCreateEx()函数直接创建一个DirectDraw7的接口。
创建一个DirectDraw 1.0的对象:
LPDIRECTDRAW lpdd = NULL;
DirectDrawCreate(NULL, &lpdd, NULL);
由于DirectX都是基于COM技术(恐怖的东西)的,所以在有了1.0版本的对象后我们可以通过其中重载的QueryInterface方法来查询最新的版本然后释放之前的旧版本:
LPDIRECTDRAW7 lpdd7 = NULL;
lpdd->QueryInterface(IID_IDirectDraw7, (LPVOID *)&lpdd7);
lpdd->Release();
lpdd = NULL;
好了,现在开始,使用lpdd7对象的方法调用都是新的接口IDirectDraw7
以上代码其实并不是安全的,为了增强其安全性,我们还应该对其加上错误处理路径,可以使用微软提供的这两个宏:
FAILED()
SUCCEEDED()
另外,在COM中,其实只要有你需要的接口的接口标识符(IID),你就可以得到任何接口的指针。
CoInitialize(NULL);    
CoCreateInstance(&CLSID_DirectDraw, NULL, CLSCTX_ALL, &IID_IDirectDraw7,  &lpdd7); 
lpdd7->Initialize(NULL);  // NULL表示使用默认的视频设备 
CoUninitialize();
以上就是微软推荐的彻底的使用COM来创建DirectDraw对象的方法。
不过在DirectDraw 7.0版本中有一个更加好的函数可以帮我们完成所有的一切:
DirectDrawCreateEx(NULL, (void **)&lpdd7, IID_IDirectDraw7, NULL);
就是那么简单,一个IDirectDraw7接口就已经创建好了。
总是别忘了要在程序结束前调用Release()。
接下来需要为它设置协作级别,当然,这一切都在接口的方法中。
lpdd7->SetCooperativeLevel(hWnd, DDSCL_NORMAL)  // 窗口模式
或者
lpdd7->SetCooperativeLevel(hWnd, DDSCL_FULLSCREEN      |
                                                           DDSCL_ALLOWMODEX            |
                                                           DDSCL_EXCLUSIVE                  |
                                                           DDSCL_ALLOWREBOOT          |  );  // 全屏模式
很简单。
然后需要设置显示模式:
lpdd7->SetDisplayMode(1024, 768, 16, 0, 0)

其中前面三个参数应该是一目了然的,后面两个0可能让人有些迷茫,其实他们代表的意思是:第一个0表示使用显卡默认的刷新率,或者可以自己设置一个刷新率,比如60。第二个0是一个额外的标记字,比如可以设置为DDSDM_STANDARDVGAMODE。这个参数很少使用,具体可以查DirectX SDK。

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/mao0504/p/4706733.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值