2016-09-21 16 views
0

MFCを使用してDirect3Dの全画面表示にしたいです。Direct3D全画面(CreateDeviceはD3DERR_INVALIDCALLを返します)

カスタムスタティッククラスを作成しました。このクラスはdirect3dを初期化します。

私はウィンドウモードに成功しました。フルスクリーンモードは失敗します。

CreateDevice関数は、D3DERR_INVALIDCALL(-2005530516)を返します。

解決方法CreateDevice代わりのAfxGetMainWindowにm_hWndをを渡す

初期

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

答えて

0

してみてください。 またはd3dpp.hDeviceWindow = AfxGetMainWindow。 多分あなたのm_hWndは無効です。

+0

私はm_hwndの代わりにAfxGetMainWindowを試しています。まだ同じ症状です。 Dialog HandleはDirect3Dのフルスクリーンモードにアクセスできないと思います。それは正しいですか? – user1320165

+0

フルスクリーンにはいくつかの特別な要件があります。そのため、MFCベースのウィンドウに適切なスタイルが設定されていない可能性があります。つまり、なぜ世界中でMFCをフルスクリーンで使用したいのですか? Direct3Dサーフェスでは、MFCコントロールは表示されません。なぜ、最初に使用するのですか?ウィンドウモードは賢明なことです。もちろん、Direct3D 11の代わりに従来のDirect3D 9を使用する必要性についても疑問に思うかもしれません。 –

+0

私はDialog Based ProjectでDirect3Dを使用したいからです。したがって、Toggle Buttonを作成し、そのスワップモード(フル<->ウィンドウ)。私はDirect3Dを使用しようとしています。 – user1320165

関連する問題