游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3244|回复: 5

全屏模式下,有没办法防止页面丢失?

[复制链接]

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2003-9-9 02:12:00 | 显示全部楼层 |阅读模式
以前我用的是窗口模式,把页面全部放内存中,从来没出现过页面丢失的情况。
但我换为全屏模式之后,只要切换出桌面再回到程序就会发生页面丢失,而且是100%发生。
我用以下函数来创建窗口的。请问怎样设置才能防止页面丢失?请高手赐教,谢谢!

//-----------------------------------------------------------------------------
// Name: CreateFullScreenDisplay()
// Desc:
//-----------------------------------------------------------------------------
HRESULT CDisplay::CreateFullScreenDisplay( HWND hWnd, DWORD dwWidth,
                                           DWORD dwHeight, DWORD dwBPP )
{
    HRESULT hr;

    // Cleanup anything from a previous call
    DestroyObjects();

    // DDraw stuff begins here
    if( FAILED( hr = DirectDrawCreateEx( NULL, (VOID**)&m_pDD,
                                         IID_IDirectDraw7, NULL ) ) )
        return E_FAIL;

    // Set cooperative level
    hr = m_pDD->SetCooperativeLevel( hWnd, DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN );
    if( FAILED(hr) )
        return E_FAIL;

    // Set the display mode
    if( FAILED( m_pDD->SetDisplayMode( dwWidth, dwHeight, dwBPP, 0, 0 ) ) )
        return E_FAIL;

    // Create primary surface (with backbuffer attached)
    DDSURFACEDESC2 ddsd;
    ZeroMemory( &ddsd, sizeof( ddsd ) );
    ddsd.dwSize            = sizeof( ddsd );
    ddsd.dwFlags           = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
    ddsd.ddsCaps.dwCaps    = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP |
                             DDSCAPS_COMPLEX | DDSCAPS_SYSTEMMEMORY;
    ddsd.dwBackBufferCount = 1;

    if( FAILED( hr = m_pDD->CreateSurface( &ddsd, &m_pddsFrontBuffer,
                                           NULL ) ) )
        return E_FAIL;

    // Get a pointer to the back buffer
    DDSCAPS2 ddscaps;
    ZeroMemory( &ddscaps, sizeof( ddscaps ) );
    ddscaps.dwCaps = DDSCAPS_BACKBUFFER;

    if( FAILED( hr = m_pddsFrontBuffer->GetAttachedSurface( &ddscaps,
                                                            &m_pddsBackBuffer ) ) )
        return E_FAIL;

    m_pddsBackBuffer->AddRef();

    m_hWnd      = hWnd;
    m_bWindowed = FALSE;
    UpdateBounds();

    return S_OK;
}

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20381
发表于 2003-9-9 02:45:00 | 显示全部楼层

Re:全屏模式下,有没办法防止页面丢失?

没办法防止的,只能你在切换回来的时候恢复被破坏的表面。

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2003-9-9 09:39:00 | 显示全部楼层

晕了

一般大地图的页面容量是很大的,而且数目也不少,那。。每次切换回来都得花费不少时间。 噢~算了,还是用回窗口模式。

5

主题

10

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
发表于 2003-9-9 10:59:00 | 显示全部楼层

Re:全屏模式下,有没办法防止页面丢失?

只有在显存里的页面切换后才需要恢复页面内容,在系统内存中的页面是不用的。

58

主题

281

帖子

281

积分

中级会员

Rank: 3Rank: 3

积分
281
QQ
发表于 2003-9-10 19:55:00 | 显示全部楼层

Re: Re:全屏模式下,有没办法防止页面丢失?

红尘一笑: Re:全屏模式下,有没办法防止页面丢失?

只有在显存里的页面切换后才需要恢复页面内容,在系统内存中的页面是不用的。


我是放内存中啊。窗口模式下不丢失,但全屏就不同了。

0

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
QQ
发表于 2003-9-10 22:16:00 | 显示全部楼层

Re:全屏模式下,有没办法防止页面丢失?

好像有个restoresuface什么的,但是内容还是需要手动恢复的~~看M$的例子上面有~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-25 13:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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