
常用软件类: |
|杀毒安全 | |联络聊天 | |网络软件 | |多媒体类 | |系统工具 | |图形图像 | |系统工具 | |应用软件 | |行业软件 |
开发设计类: |
|动画制作 | |图像处理 | |3D设计 | |操作系统 | |站长学院 | |网络相关 | |WEB设计 | |数据库类 | |程序开发 |
如果成功,返回值是S_OK。参数需要好好解释一下,看下面:
· REFCLSID rclsid:这是一个类标识符(不要同GUID搞混了哦),有为它准备好的常量标识符供你选择。对于IDirectDraw7来说,使用CLSID_DirectDraw。注意没有版本号,因为它是类标识符,不是接口标识符。
· LPUNKNOWN pUnkOuter:这个同我们在DirectDrawCreate()中看到的一样,设置为NULL。
· DWORD dwClsContext:这个必需的值叫作执行上下文,它定义了控制新生成对象的代码将要执行的方式。这个值可以从CLSCTX列表中选取,对于我们现在的情况,我们用CLSCTX_ALL,它包含了所有可能的值。
· REIID riid:我们在QueryInterface()中看过它。这个IID是IID_DirectDraw7。
· LPVOID *ppv:依然同DirectDrawCreate()中的一样,是指向接口指针的地址。
调用这个函数将取代我们上一个方法中的DirectDrawCreate()、QueryInterface()和Release()三个函数,所以简捷一些。当然,使用哪种随便你了。直接调用COM比我们先前用的方法少了一个多于地接口指针。一旦你用CoCreateInstance()建立了一个对象,你还得调用Initialize()函数初始化这个对象。在C++里可能写成这样IDirectDraw7::Initialize()。以下是它的原形:
HRESULT Initialize(GUID FAR *lpGUID);
将使用同DirectDrawCreate()中一样的GUID,就是NULL。在我们继续前,让我给你看一个使用COM创建DirectDraw对象的例子:
LPDIRECTDRAW7 lpdd7; // interface pointer
// initialize COM
CoInitialize(NULL);
// create the object
CoCreateInstance(CLSID_DirectDraw, NULL, CLSCTX_ALL, IID_IDirectDraw7, (void**)&lpdd7);
// initialize the object
lpdd7->Initialize(NULL);
直接看例子可能使你更容易理解一些。好了,建立DirectDraw对象的最难的两种方法你已经学会了,那就让我们看看最简单的方法吧! 它只有一步,没有多于的接口指针,不用设置COM,什么都没有。就是下面这个函数:
DirectDrawCreateEx(
GUID FAR *lpGuid,
LPVOID *lplpDD,
REFIID iid,
IUnknown FAR *pUnkOuter
);
所有的参数我们看起来都比较熟悉,因为我们刚才看过它们了。第一个,第二个和第四个参数同DirectDrawCreate()中的一样,只是这里需要用(void**)来修饰一下我们接口指针的地址——别问我为什么,这不是我的主意。第三个参数,riid,是我们在函数CoCreateInstance()中传递的接口ID,所以我们就用IID_IDirectDraw7。就这样,无论用哪种方法,我们得到了我们的DirectDraw对象,我们可以继续使用这个对象了。要做的头两件事是设置协作等级和显示协议。
八.作等级和显示模式
我不需要说太多。Windows编程设置协作级别你只需要调用IDirectDraw7::SetCooperativeLevel()函数;设置显示模式你就调用IDirectDraw7::SetDisplayMode()函数。就这么简单!先来看看协作级别。这就是函数原形:
HRESULT SetCooperativeLevel(
HWND hWnd,
DWORD dwFlags
);
返回的类型是HRESULT,你应该已经熟悉它了。对于所有的DirectX函数调用,你都可以用SUCCEEDED()和FAILED()宏检测调用的结果。以下是函数SetCooperativeLevel()的参数:
· HWND hWnd:很熟悉吧!传递主窗口的句柄给它,使Windows知道谁将使用它的资源。
· DWORD dwFlags:这个也很眼熟吧!每次我们看到dwFlags参数,几乎都有一个大的标志常量列表供我们选择,并且可以用“|”组合。这次也不会让你失望的哦!
1.SCL_ALLOWMODEX:启用Mode X 显示模式(如320×200,320×240或者320×400)。该标志只能用于DDSCL_EXCLUSIVE和DDSCL_FULLSCREEN模式。
2.SCL_ALLOWREBOOT:在独占模式中启用Ctrl+Alt+Del组合键功能。
3.SCL_EXCLUSIVE:请求独占模式,必须与DDSCL_FULLSCREEN同时使用。
4.SCL_FULLSCREEN:独占模式的拥有者负责整个主表面,GDI被忽略,必须与DDSCL_EXCLUSIVE同时使用。
5.SCL_NORMAL:表示常规的Windows应用程序,不能与DDSCL_ALLOWMODEX、DDSCL_EXCLUSEIVE或DDSCL_FULLSCREEN标志同时使用,在该模式下运行的应用程序不能进行页交换或者更改主调色板。
6.SCL_NOWINDOWCHANGES:防止DirectDraw最小化或恢复应用程序窗口。
还有几个标志常量我们暂时用不到,就不说了。由于我们要建
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页