l IDirectDraw
l IDirectDraw2
l IDirectDraw3
l IDirectDraw4
l IDirectDraw7
其中调用IDirectDraw接口的方法如下:
1. 声明LPDIRECTDRAW对象。
2. 通过DirectDrawCreate函数来获得接口对象。这样我们的DirectDraw接口就可以调用了。
3. 通过接口对象的SetCooperativeLevel方法设置控制模式。
4. 再用接口对象的SetDisplayMode方法设置显示模式。
5. 然后我们通过LPDIRECTDRAW对象的CreateSurface方法来创建LPDIRECTDRAWSURFACE对象。
6. 之后我们就可以接口对象和页面进行相关的操作来完成自己想要的功能。当然这是最基本的,接口对象还可以创建裁剪区、调色板等对象。
7. 用完之后,调用Release方法释放接口对象。
那么,现在我来讲一下调用IDirectDraw7接口的一些经验。
首先,以前调用IDirectDraw接口时,只要加入ddraw.dll。但是调用IDirectDraw7时除了ddraw.dll还要加入dxguid.dll。否则,就会编译出错。
然后,声明一个LPDIRECTDRAW7的接口对象。而现在不再是用DirectDrawCreate来获得接口对象了。要用DirectDrawCreateEx方法。其声明如下:
extern HRESULT WINAPI DirectDrawCreateEx( GUID FAR * lpGuid, LPVOID *lplpDD, REFIID iid,IUnknown FAR *pUnkOuter );
其中iid参数所指的就是接口的ID,在这里因为要调用DirectDraw7接口所以应该填入IID_IDirectDraw7。
当成功申明后,就可以设置控制模式和显示模式。特别是要注意的是设置显示模式这个方法,由原来的三个参数变为了五个参数。其中最后两个参数的说明如下:
dwRefreshRate
Refresh rate of the new mode. Set this value to 0 to request the default refresh rate for the driver.
大意是:用于设置显示时的刷新频率,(就是65MHZ、75MHZ、85MHZ),如果设为0使用当前默认设置。
dwFlags
Flags describing additional options. Currently, the only valid flag is DDSDM_STANDARDVGAMODE, which causes the method to set Mode 13 instead of Mode X 320x200x8 mode. If you are setting another resolution, bit depth, or a Mode X mode, do not use this flag and set the parameter to 0
大意是:描述附加选项标志,当前只有一个有效标志,那就是DDSDM_STANDARDVGAMODE。如果不使用改值可以设置为0。
另外,创建页面对象由之前的LPDIRECTDRAWSURFACE变为LPDIRECTDRAWSURFACE7。其中页面描述结构由之前的DDSURFACEDESC变为DDSURFACEDESC2。同时声明页面描述后,应立即用ZeroMemory来使对象的值为0,否则就会创建页面不成功。
以上的步骤都成功后,就可以进入我们正真实现功能的部分。当用完后,就可以通过Release方法来释放对象。