调用DirectDraw接口和调DirectDraw7接口的不同点对比
调用DirectDraw接口步骤:
1. 包含链接库ddraw.lib
2. 初始化窗口类型(全屏独占时类型用popup)。
3. 在初始化窗口后初始化DirectDraw(使用函数DirectDrawCreate)
4. 创建DirectDraw实例指针lpDD。
5. lpDD->SetCooperativeLevel设置显示全屏独占还是窗体。
6. lpDD->SetDisplayMode(640,480,8)设置显示模式。
7. DDSURFACEDESC ddsd的信息配置。
8. lpDD->CreateSurface创建主页面。
9. lpDDSPrimary->GetAttachedSurface ( &ddscaps, &lpDDSBack
)提取后台缓冲页面。
10. 利用DirectDraw的函数对一些bmp处理,或者获取hdc对页面操作lpDDSBack->GetDC(&hdc)。
11. lpDDSPrimary->Flip(NULL,0) 一经Flip,两个表面的指针互换。lpDDSPrimary指向后台表面,
而lpDDSBack指向了原来的前台主表面.(窗口模式不能进行换页,要使用位块传送来将内容传送到主页面)。
12. 释放所用资源。
调用DirectDraw7接口步骤:
1. 包含链接库ddraw.lib、dxguid.lib
2. 初始化窗口类型(全屏独占时类型用popup)。
3. 在初始化窗口后初始化DirectDraw7(使用函数DirectDrawCreateEx或者通过已创建的DirectDraw接口通过QueryInterface方法来获得)
4. 创建DirectDraw7实例指针lpDD。
5. lpDD->SetCooperativeLevel设置显示全屏独占还是窗体。
6. lpDD->SetDisplayMode(640,480,8,0,0)设置显示模式(这里比DirectDraw接口多了两个参数)最后两个参数描述分别是:
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
7. DDSURFACEDESC2
ddsd的信息配置(声明完页面描述后,应该立即用ZeroMemory函数使对象的值为0,否则不能成功创建页面)
8. lpDD->CreateSurface创建主页面。
9. lpDDSPrimary->GetAttachedSurface ( &ddscaps, &lpDDSBack
)提取后台缓冲页面。
10. 利用DirectDraw的函数对一些bmp处理,或者获取hdc对页面操作lpDDSBack->GetDC(&hdc)。
11. lpDDSPrimary->Flip(NULL,0) 一经Flip,两个表面的指针互换。lpDDSPrimary指向后台表面,
而lpDDSBack指向了原来的前台主表面.(窗口模式不能进行换页,要使用位块传送来将内容传送到主页面)。