DirectX starten mittels WindowsForms
-
Hallo !
Ich hab folgendes Problem...
Ich hab eine Anwendung in C++ per WINAPI und DirectX 3D geschrieben. Über die WinMain Funktion wird ein Fenster erzeugt, dass dann mittels Direct3D zu einer Vollbildanwendung wird. Nun möchte ich aber dieses Vollbildanwendung von DirectX erst über ein anderes Fenster, das ein Windowsformular enthält starten. Es sollen als erstes nötige Startparameter der DirectX 3D Anwendung in ein Formular ein geben werden und anschließen auf Knopfdruck im Vollbildmodus das DirectX Programm ablaufen. Leider bin ich ein ziemlicher Neuling und habe keine Ahnnung wie ich das realisieren kann.
Ich wäre jedem ziemlich verbunden, der mir mit konkreten Tipps auf die Sprünge helfen könnte.
-
Womit hast du denn genau Probleme?
-
Mittlerweile habe ich es anders probiert:
Ich hab ein Hauptfenster erstellt und auf Knopfdruck erzeugt dieses ein Childwindow. In diesem will ich nun DirectX initalisieren.
Mein Problem ist nun aber erstens, dass ....
if( FAILED(hr = g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hChild, dwBehaviorFlags, &d3dpp, &g_pd3dDevice ) ) ) { MessageBox(NULL, "Fehler !","Achtung - TA",MB_OK | MB_ICONINFORMATION); return; }immer die Fehlermeldung ausspuckt und damit das Device nicht erzeugt wird.
Zweitens weiß ich nicht wo ich die Renderfunktion unterbringen soll ?
Bei der Anwendung, wo DirectX im Hauptfenster initialisiert wurde, war die Renderfunktion wiefolgt in der WINMAIN:while( uMsg.message != WM_QUIT ) { if( PeekMessage( &uMsg, NULL, 0, 0, PM_REMOVE ) ) { TranslateMessage( &uMsg ); DispatchMessage( &uMsg ); } else g_dCurTime = (float)timeGetTime(); g_fElpasedTime = (float)((g_dCurTime - g_dLastTime) * 0.001); g_dLastTime = g_dCurTime; render(); }Wenn das Childfenster aber nicht offen ist muss nicht gerendert werden...
-
Dann würde ich mir jetzt das Ergebnis von CreateDevice (hr) ansehen und in der DX Dokumentation nach der Bedeutung des Fehlercodes suchen. Du machst beim Aufruf bestimmt was falsch oder das Fenster ist ungültig. Der Fehlercode wird es dir sagen.
-
Ich hab schon eine Lösung gefunden !