DirectX in normalen Dialogfeld einbinden ?

Meisterzunge

Mitglied
Kann ich in mein MFC Dialogfeld (CDialog) irgendwie DirectX unterbringen?

Das Dialogfeld soll so komplett mit DirectX dargestellt werden, oder sowie ein Steuerelement im Dialogfeld platziert werden. Später möchte ich durch DirectX ein Spielfeld mit Spieler und Co malen.
 
Ja, das geht. Du musst nur ein Dummy-Control drauf plazieren (STATIC mit SS_OWNERDRAW nehme ich immer) und bei den Presentation-Parametern das HWND dieses Controls einsetzen. In OnDrawItem rufst du dann dein BeginScene/EndScene/Present auf.
 
Also ich habs so ungefähr verstanden. Aber "BeginScene/EndScene/Present" verstehe ich nicht ;) Kannst du mir da nen bischen Code posten?

Brauche nur ein kleines Gerüst mit den drei Funktionen wo ich nen bischen gucken kann
 
Zuletzt bearbeitet:
Hast du denn schon mal mit Direct3d (ich gehe mal davon aus, ist bei DirectDraw aber ähnlich) gearbeitet?

Das BeginScene/EndScene/Present ist ein Funktionsblock, der bei Direct3D in Verwendung ist, bei DirectDraw läuft das ähnlich ab:

Innerhalb der Darstellung würde das so aussehen:

if ( SUCCEEDED( pD3DDevice->BeginScene() ) )
{
// Darstellungsroutinen
pD3DDevice->EndScene();
pD3DDevice->Present( 0, 0, 0, 0 );
}
 
Ich habe bisher nur ein wenig mit DirectDraw gearbeitet. Wenn ich das richtig verstanden habe läuft es dann so ab:

if ( SUCCEEDED( pD3DDevice->BeginScene() ) )
{
// While Hauptschleife
// ...

// Ab hier Programmende:
pD3DDevice->EndScene();
pD3DDevice->Present( 0, 0, 0, 0 );
}

EDIT:
Sorry, stimmt nicht. Habe gerade ein bischen gesucht. Mal gucken was ich noch so finde. Danke aber schon mal
 
Zuletzt bearbeitet:
Habe doch ne ne Frage. Gehört nicht direkt zu diesem Thema, aber gibt es da nicht einfach eine Funktion in DirectX in der ich Bitmaps zeichnen kann (HBITMAP o.ä.) ?

Bisher habe ich immer mit CDC::StretchBlt() Bitmaps abgebildet. Gibt es unter Direct3D so etwas ähnliches?

Bitte nicht hauen, habe mit Direct3D noch keine Erfahrungen
 
In DirectX selbst gibt es nichts für HBITMAPs. Da du da aber das DirectX auf ein Control gepappt hast (also im Fenster-Modus bist), kannst du dir über GetDC nach wie vor das HDC besorgen (bzw. CDC) und mit StretchBlt arbeiten.
 
Genau das wollte ich eigentlich vermeiden ;)

Da mein Rechner mit StretchBlt() auf 100% Auslastung kommt (Wegen der Großen Anzahl an Aufrufen pro Sekunde).
 
Ach so :)

Dann würde ich die Grafik-Daten in eine Textur packen (jede halbwegs brauchbare Karte kann beliebige Grössen). Wenn es auf allen laufen soll, müsstest du die Grafik auf 256x256 runterstutzen (das läuft ÜBERALL).

Wenn die Grafiken als Datei vorliegen, kannst du die einfach mit D3DXCreateTextureFromFile laden lassen.
 
Zurück