Ken*_*ell 12 windows directx winapi device
我有一个由Direct3D9 :: CreateDevice()失败引起的问题.在Windows 7下使用锁定屏幕执行以下代码时失败.由于要求,我需要能够在屏幕锁定时创建设备.
使用以下参数调用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 );
Run Code Online (Sandbox Code Playgroud)
我的记忆很模糊,但我相信这是 D3D 在锁定屏幕(并作为服务运行)方面的一个已知限制(“设计使然”)。
即使您可以创建 D3D 设备,您也无法在锁定屏幕顶部绘图。因此,您最好将应用程序设计为将 D3D 设备创建推迟到屏幕解锁之后。
使用WTSRegisterSessionNotification注册屏幕锁定或解锁时的通知。
| 归档时间: |
|
| 查看次数: |
1539 次 |
| 最近记录: |