为了创建一个带有后备缓冲的主画面,你不得不创建DirectDraw所称的复杂画面.下面是创建步骤.
1.首先,你要将DDSD_BACKBUFFERCOUNT加到dwFlags标志字段,向DirectDraw表明DDSURFACEDESC2的dwBackBufferCount字段有效,以及含有后备缓冲的数目(本例中为1)
2.其次,将控制标志DDSCAPS_COMPLEX和DDSCAPS_FLIP加到ddsCaps.dwCaps字段的中字DDSURFACEDESC2结构上.
3.最后,像通常一样创建主画面.从它调用IDIRECTDRAWSURFACE4::GetAttachedSurface(),获得后备缓冲.如下所示:
HRESULT GetAttachedSurface(LPDDSCAPS2 lpDDSCaps,LPDIRECTDRAWSURFACE4 FAR *lplpDDAttachedSurface);
lpDDSCaps是DDSCAPS2结构中包启所需画面信息的标志,在这种情问供下,你需要一个后备缓冲,应该这样设置:
DDSCAPS2 ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
或者直接用DDSURFACEDESC2结构中DDSCAPS2字段存放另一个变理,像下面这样:
ddsd.ddsCcaps.dwcaps = DDSCAPS_BACKBUFFER;
如果你想操纵后备缓冲中的信息,你可以这样做:
//copy the double buffer into the primary buffer
DDRAW_INPUT_STRUCT(ddsd)
// lock the back buffer surface
lpddsback->Unlock(NULL,&ddsd,DDLOCK_SURFACEMEMORYPTR|DDLOCK_WAIT,NULL);
// now ddsd.lpSurface and ddsd.lPitch are valid
// do whatever...
// unlock the back buffer, so hardware can work with it
lpddsback->Unlock(NULL);
现在,唯一的一个问题是你还不知道如何翻页.或者,将后备缓冲画面变成主画面从而产生两页动画. 参看下一节页面变换.