如何初始化DirectDraw

来源:百度知道 编辑:UC知道 时间:2024/09/20 02:30:08
给我一个初始化DirectDraw的最简单例子
把贴图功能也实现。
我的制作平台是Visual C++ 2003 .NET
DIRECTX 8 SDK
如果成功绝对加分!

arbies的答案运行后

e:\visual c++\directdraw_cz\sy\复件 016\016.cpp(117) : warning C4244: “return” : 从“WPARAM”转换到“int”,可能丢失数据
e:\visual c++\directdraw_cz\sy\复件 016\016.cpp(216) : error C2660: “IDirectDraw::SetDisplayMode” : 函数不接受 5 个参数
e:\visual c++\directdraw_cz\sy\复件 016\016.cpp(225) : error C2664: “IDirectDraw::CreateSurface” : 不能将参数 1 从“DDSURFACEDESC2 *__w64 ”转换为“LPDDSURFACEDESC”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
e:\visual c++\directdraw_cz\sy\复件 016\016.cpp(231) : error C2664: “IDirectDrawSurface7::GetAttachedSurface” : 不能将参数 2 从“LPDIRECTDRAWSURFACE *__w64 ”转换为“LPDIRECTDRAWSURFACE7 * ”
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

最简单的是使用全屏独占模式。

要开始初始化DD,首先创建并显示一个窗口,获得它的句柄;
初始化代码:
#include <ddraw.h>
#pragma comment(lib,"dxguid.lib")
#pragma comment(lib,"ddraw.lib")

LPDIRECTDRAW7 lpDD;
LPDIRECTDRAWSURFACE7 lpDDSMain;
LPDIRECTDRAWSURFACE7 lpDDSBack;

//下面程序初始化DD,并设置窗口分辨率为width*height,bpp为色深,注意要设定相应变量的值为适合的值(如800*600*16),否则初始化失败。
bool InitDDraw(HWND hWnd, int width, int height, int bpp)
{
if(FAILED(DirectDrawCreateEx(NULL, (VOID**)&lpDD, IID_IDirectDraw7, NULL)))
return false;
if(FAILED(lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN)))
return false;
if(FAILED(lpDD->SetDisplayMode(width, height, bpp, 0, 0)))
return false;

DDSURFACEDESC2 ddsd;
ZeroMemory( &ddsd, sizeof( ddsd ) );
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DD