2016-09-21 2 views
0

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); 

Répondre

0

Essayez de passer à m_hWnd CreateDevice au lieu de AfxGetMainWindow. Ou d3dpp.hDeviceWindow = AfxGetMainWindow. Peut-être que votre m_hWnd n'est pas valide.

+0

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

+0

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. –

+0

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