创建一个主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。

IDirectDraw接口的更多相关文章

  1. DirectDraw

    一.DirectDraw接口 DirectDraw接口图如下: 1.IUnknown:所有COM对象都必须从这个基本接口派生 2.IDirectDraw:这是开始使用DirectDraw时必须创建的主 ...

  2. DirectDraw读书笔记

    DirectDraw对象 DirectDraw对象是DirectDraw应用程序的核心.它是你在建立DirectDraw应用程序时所要创建的第一个对象,再用它来创建所有其它相关的对象.通过调用Dire ...

  3. 初次接触:DirectDraw

    第六章 初次接触:DirectDraw 本章,你将初次接触DirectX中最重要的组件:DirectDraw.DirectDraw可能是DirectX中最强大的技术,因为其贯穿着2D图形绘制同时其帧缓 ...

  4. DirectX中文手册

    目  录 第一章 DirectX基础(初级篇) 第一节  什么是DirectX 一.什么是DirectX ? 二.DirectX的组成部分 三.关于DirectDraw 四.为什么要使用DirectD ...

  5. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  6. 干货来袭-整套完整安全的API接口解决方案

    在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...

  7. 12306官方火车票Api接口

    2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...

  8. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  9. Java基础Map接口+Collections

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

随机推荐

  1. Problem C: Pie

    题目链接 http://codeforces.com/gym/100722/attachments/download/3466/20062007-northwestern-european-regio ...

  2. Java 解压zip压缩包

    因为最近项目需要批量上传文件,而这里的批量就是将文件压缩在了一个zip包里,然后读取文件进行解析文件里的内容. 因此需要先对上传的zip包进行解压.以下直接提供代码供参考: 1.第一个方法是用于解压z ...

  3. AndroidStudio3更改包名失败

    使用Android Studio 3.0 Beta6更改包名refactor---rename一直提示:Refactoring cannot be performedFile xxx\build\xx ...

  4. xBIM 日志操作

    目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...

  5. MOBA 游戏技能系统设计 2.0

    随着游戏开发的完整度提升,技能系统的设计复杂性也越来越高,导致了用模板方式的配置方法和处理方法会导致以下几个问题: 代码冗余 排错困难 配置项冗余 熟悉业务流程时间长 扩展性低 经过我思考决定重写之. ...

  6. 洛谷 [P1020] 导弹拦截 (N*logN)

    首先此一眼就能看出来是一个非常基础的最长不下降子序列(LIS),其朴素的 N^2做法很简单,但如何将其优化成为N*logN? 我们不妨换一个思路,维护一个f数组,f[x]表示长度为x的LIS的最大的最 ...

  7. 自用最小生成树模板(基于Kruskal)

    200ms的板子,我尽力了,以我自己的能力没法再快了... 基于Kruskal的做法,跑了200ms,以我自己的能力没办法再快了,不过翻了几页评测列表发现我是最快的...我觉得应该会有更快的方法.想法 ...

  8. 输入url到渲染出页面的过程

    输入地址 浏览器查找域名的 IP 地址 这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存... 浏览器向 web 服务器发送一个 HTTP 请求 服务器的永久 ...

  9. python学习:备份文档并压缩为zip格式

    import os import time source = ['/root/notes'] target_dir = '/root/backup' if not os.path.exists(tar ...

  10. 洛谷P1854 花店橱窗布置 分析+题解代码

    洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...