游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1989|回复: 3

求助: 关于MS DXSDK : CDisplay类

[复制链接]

4

主题

10

帖子

28

积分

注册会员

Rank: 2

积分
28
QQ
发表于 2004-10-10 10:44:00 | 显示全部楼层 |阅读模式
//-----------------------------------------------------------------------------
// 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_3DDEVICE;
    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;
}



哪位大虾解释一下
m_pddsBackBuffer->AddRef();
这句话的具体用处。为什么要这样用?
谢谢。

18

主题

573

帖子

573

积分

高级会员

Rank: 4

积分
573
发表于 2004-10-10 22:29:00 | 显示全部楼层

Re:求助: 关于MS DXSDK : CDisplay类

建议先看看《inside COM》,你就会知道了。

17

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
QQ
发表于 2004-10-11 08:21:00 | 显示全部楼层

Re:求助: 关于MS DXSDK : CDisplay类

好象是COM组件,不过我的程序里都没有加AddRef()这一句好象也可以正常运行?

7

主题

88

帖子

88

积分

注册会员

Rank: 2

积分
88
QQ
发表于 2004-10-11 09:00:00 | 显示全部楼层

Re:求助: 关于MS DXSDK : CDisplay类

   是COM,意思是增加一个接口
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-22 17:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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