Direct3d im MDI-Child Fenster einer Windows.Forms Anwendung


Thomas Wölfer
Thomas Wölfer

06. April 2005


Beim DirectX9 SDK ist bei den Beispielen für Managed Code unter anderem das 'Tutorial 6' dabei. Das eignet sich prima für die ersten Versuche mit 3d unter .Net. Das Problem: Normalerweise will man die 3d-Ansichten nie so dargestellt bekommen wie das in allen Beispielen gemacht wird. Dort sind die Direct3d Geschichten nämlich immer im Hauptfenster der Anwendung und füllen dessen komplette Client Area.

Statt dessen wird man normalerweise eher eine 3d Ansicht in einem MDI Child haben. Nimmt man nun beispielsweise das Tutorial 6 als Ausgang, fügt eine Form hinzu die der MdiParent wird, erzeugt dann eine 'Meshes' Form und weist der als MdiParent dann die neue Form zu - stürzt das ganze mit einer Direct3dException ab.

Läßt man die Zuweisung weg, dann gehts - nur ist das Fenster dann kein MdiChild sondern außerhalb der Anwendung frei beweglich. Unschön.

Die Lösung ist aber wirklich einfach: Man leitet 'Meshes' eben nicht von 'Form' ab, sondern von UserControl. (Dazu muss man noch die typischen UserControl Funktionen einbauen). Dann hat man ein ganz normales Control das per DirectX 3d-fähig ist - und das man einfach in einer beliebigen Form unterbringen kann. Auch in einem MdiChild.