我有一个由 Direct3D9::CreateDevice() 失败引起的问题。在 Windows 7 下锁屏执行以下代码时失败。 由于要求,我需要能够在锁屏时创 build 备。

当使用以下参数调用 CreateDevice 时,我收到 D3DERR_INVALIDCALL 错误。我对正在使用的 HWND 进行了广泛的试验,并仔细检查了它是否有效。我还尝试了对演示参数的各种调整,但无济于事。有没有人以前遇到过这个问题,或者对可能导致无效调用返回的原因有更好的了解?

同样,此故障仅在锁定屏幕时发生,当在任何其他测试状态下运行时,它会成功。

D3DPRESENT_PARAMETERS pp;
ZeroMemory( &pp, sizeof(D3DPRESENT_PARAMETERS) );
pp.BackBufferFormat = D3DFMT_UNKNOWN;
pp.SwapEffect       = D3DSWAPEFFECT_DISCARD;
pp.Windowed         = TRUE;

HWND focusWndHnd = GetConsoleWindow();

if ( focusWndHnd == NULL && pp.hDeviceWindow == NULL )
{
   focusWndHnd = ::GetDesktopWindow();
}


IDirect3DDevice9* pd3dDevice;

IDirect3D9* pD3D = Direct3DCreate9( D3D_SDK_VERSION );

hr = pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_NULLREF, focusWndHnd,
             D3DCREATE_SOFTWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE, &pp, &pd3dDevice );

最佳答案

旧版 Direct3D 9 界面将“安全桌面”视为丢失设备的情况。使用支持 WDDM 的 Direct3D 版本(Direct3D9Ex、Direct3D 10.x 或 Direct3D 11.x)将避免此问题。

关于windows - 屏幕锁定期间 D3D 设备故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8859560/

10-14 17:13