游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2031|回复: 2

关于DirectDraw编程的求助!!!!

[复制链接]

2

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2004-2-14 12:46:00 | 显示全部楼层 |阅读模式
在创建双缓冲界面时,在取缓冲页面的指针时失败,HRESULT的值指明错误为”Requested item was not found.“。部分原代码如下:
                LPDIRECTDRAW7  lpDD=NULL;
                LPDIRECTDRAWSURFACE7 lpDDSPrimary=NULL;
                LPDIRECTDRAWSURFACE7 lpDDSBack=NULL;
               
                drval=DirectDrawCreateEx(NULL,(LPVOID*)&lpDD,IID_IDirectDraw7,NULL);
if(FAILED(ddrval))
{
ErrStr=Err_DirectDrawCreate;
return FALSE;
}

//SET COOPERATIVE LEVEL

ddrval = lpDD->SetCooperativeLevel(hWnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);
if(FAILED(ddrval))
{
ErrStr=Err_Coop;
return FALSE;
}

//SET THE DISPLAY MODE
ddrval = lpDD->SetDisplayMode(800,600,16,0,0);
if(FAILED(ddrval))
{
ErrStr="SET DISPLAYMODE ERROR";
return FALSE;
}
                DDSURFACEDESC2 ddsd;
DDSCAPS2 ddscaps;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
ddrval=lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL);
if(FAILED(ddrval))
{
ErrStr=Err_CreateSurf;
return FALSE;
}

//Fetch back buffer interface

ddscaps.dwCaps=DDSCAPS_BACKBUFFER;
ddrval=lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);
if(FAILED(ddrval))
{
ErrStr="create backsurface false";
return FALSE;
}


谢谢各位高手能指教一二

30

主题

298

帖子

299

积分

中级会员

Rank: 3Rank: 3

积分
299
QQ
发表于 2004-2-15 00:09:00 | 显示全部楼层

Re:关于DirectDraw编程的求助!!!!

.....................................真服了你,前面不是写得不错嘛

ddscaps.dwCaps=DDSCAPS_BACKBUFFER;

使用前没有清零吧。

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2004-2-16 11:04:00 | 显示全部楼层

Re: 关于DirectDraw编程的求助!!!!

DDSURFACEDESC2 ddsd;
//DDSCAPS2 ddscaps;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS|DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
ddrval=lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL);
if(FAILED(ddrval))
{
ErrStr=Err_CreateSurf;
return FALSE;
}

//Fetch back buffer interface

//ddscaps.dwCaps=DDSCAPS_BACKBUFFER;
ddsd.ddsCaps.dwCaps=DDSCAPS_BACKBUFFER;
ddrval=lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);

你把创建表面那段改用上面这一段就行了。试试。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-5-15 03:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表