Je souhaite utiliser Direct3D en plein écran avec MFC.Direct3D Plein écran (CreateDevice return D3DERR_INVALIDCALL)
J'ai créé une classe statique personnalisée. cette classe initialise direct3d.
J'ai réussi en mode fenêtre. mais le mode plein écran est échoué.
La fonction CreateDevice renvoie D3DERR_INVALIDCALL (-2005530516).
Comment le résoudre?
initial
// Create the D3D object.
if(NULL == (m_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = FALSE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp.BackBufferWidth = 1920;
d3dpp.BackBufferHeight = 1080;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
d3dpp.hDeviceWindow = m_hWnd;
HRESULT temp;
// Create the D3DDevice
if(FAILED(temp = m_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, AfxGetMainWnd()->m_hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &m_pd3dDevice)))
{
return E_FAIL;
}
// Turn on the zbuffer
m_pd3dDevice->SetRenderState(D3DRS_ZENABLE, TRUE);
m_pd3dDevice->SetRenderState(D3DRS_AMBIENT, 0xffffffff);
J'essaye d'AfxGetMainWindow au lieu de m_hwnd. mais toujours le même symptôme. Je suppose que Dialog Handle ne peut pas accéder au mode Plein écran Direct3D. Est ce bien?? – user1320165
Plein écran a un certain nombre d'exigences particulières, il est donc probable que la fenêtre MFC ne soit pas configurée avec le bon style. Cela dit, pourquoi dans le monde voudriez-vous être en mode plein écran et utiliser MFC? Aucun des contrôles MFC n'est visible sur une surface Direct3D, alors pourquoi l'utiliser en premier lieu? Le mode fenêtré est la seule chose sensée à faire. Bien sûr, je doute aussi de la nécessité d'utiliser Direct3D 9 hérité au lieu de Direct3D 11. –
parce que je veux utiliser Direct3D dans Dialog Based Project. Donc, faites le bouton bascule et ce mode d'échange (plein <-> fenêtré). J'essaie d'utiliser Direct3D 11. Merci de répondre. – user1320165