• IDirectDraw接口 分类: VC++ 2013-11-09 11:13 705人阅读 评论(0) 收藏


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

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

  • 相关阅读:
    手机截屏雷阵雨
    2010年5月20日 用户的数据永远不会靠谱
    2010年5月17日 OCD
    2010年8月9日 流水账
    2010年5月19日 借鉴
    立表为据
    2010年6月2日 回来
    不重视小C打屁屁
    2010年8月16日 知行合一
    2010年5月18日 小细节大隐患
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706733.html
Copyright © 2020-2023  润新知