|
|
发表于 2006-1-17 18:58:00
|
显示全部楼层
Re:direct draw如何获得丢失的设备
现在我知道解决的方式了 刚看到一本电子书上说的解决方法~
当一个DirectDraw程序被最小化时,它就丧失了对页面的控制权,如果我们的程序不知道,继续改变页面时就会发生"DDERR_SURFACELOST"错误。而当我们重新回到DirectDraw程序时Windows不会帮我们把页面恢复,如果我们不自己恢复页面用户就会看到黑屏。为了避免出现这种情况,我们可以写一个恢复页面的函数:
void RestoreSurface( )
{
lpDD->RestoreAllSurfaces( ); //恢复所有页面
ReloadBitmap( );//自己的调图函数,重新画上页面内容
}
值得注意的是Windows也不会帮我们恢复页面的实际内容,我们要象上面的程序那样,再调用自己的调图函数才行。应该什么时候调用RestoreSurface( )呢?是不是每一条改变页面的语句都要测试一下有没有发生DDERR_SURFACELOST错误呢?其实并不需要。一般游戏的引擎都是频繁刷新式,每秒钟要刷新几十次,每一次刷新必然要调用上面提到的Flip( )。所以我们可以写一个FlipSurface( )然后以后调用它来换页:
void FlipSurface( )
{
HRESULT ddrval;
ddrval=lpDDSPrimary->Flip(NULL,DDFLIP_WAIT);
if (ddrval==DDERR_SURFACELOST)
RestoreSurface( );
}
上面的内容转载自那本书,书的名字我忘记了~ |
|