gpt4 book ai didi

c++ - DirectDraw 问题 - 将应用程序作为常规 Windows 应用程序运行

转载 作者:行者123 更新时间:2023-11-27 23:35:35 24 4
gpt4 key购买 nike

我正在开发一个视频录制应用程序,我想用 Logo 和录制计时器覆盖视频预览。

我尝试运行全屏应用程序,一切正常。然后我尝试将该应用程序作为常规 Windows 应用程序运行,但它返回了一个错误。

如果有办法修改它以将应用程序作为常规 Windows 应用程序运行,谁能看一下下面的代码?

HRESULT CViewfinderRenderer::OnStartStreaming()
{
HRESULT hr = S_OK;
DDSURFACEDESC ddsd;

m_pDD = NULL;

//full screen settings
hr = DirectDrawCreate(NULL, &m_pDD, NULL);
hr = m_pDD->SetCooperativeLevel(m_hWnd, DDSCL_FULLSCREEN);

ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_FLIP | DDSCAPS_PRIMARYSURFACE;
ddsd.dwBackBufferCount = 1;

//end full screen settings

//normal settings
/*hr = DirectDrawCreate(NULL, &m_pDD, NULL);
hr = m_pDD->SetCooperativeLevel(m_hWnd, DDSCL_NORMAL);

ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_BACKBUFFERCOUNT;
ddsd.dwBackBufferCount = 1;*/
//end normal settings

hr = m_pDD->CreateSurface(&ddsd, &m_pSurface, NULL);
if (hr != DD_OK) {
return hr;
}

// Get backsurface
hr = m_pSurface->EnumAttachedSurfaces(&m_pBackSurface, EnumFunction);

return S_OK;
}

最佳答案

即使在窗口运行时,您也需要创建一个主表面,只是它不是可翻转的表面。

 //full screen settings
hr = DirectDrawCreate(NULL, &m_pDD, NULL);
hr = m_pDD->SetCooperativeLevel(m_hWnd, DDSCL_NORMAL);

ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;

除了创建表面之外,您很可能还想为窗口创建裁剪器。有关完整示例,请参阅 this GameDev article 中的“运行窗口”段落.

关于c++ - DirectDraw 问题 - 将应用程序作为常规 Windows 应用程序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/419775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com