dds-Dateien in System.Windows.Forms.Form anzeigen [c#]
-
hallo,
ich möchte in einem Form eine dds - Datei anzeigen (wenn möglich im Designmodus).
allerdings habe ich bisher keine möglichkeit gefunden, diesen Dateityp in ein System.Drawing.Image zu konvertieren.
Hat jemand eine Idee, Link, wie ich das bewerkstelligen kann ????
-
hab was vergessen:
das ganze soll OHNE DirectX funktionieren !
-
besorg dir die spezifikation und lad die Datei einfach in ein Bitmap Objekt
-
Danke für deine Anwort.
Ich habe nun etwas herumexperimentiert und festgestellt, dass ich
direct3d während dem entwurf wunderbar benutzen, und somit meine
controls rendern kann.
meine Direct3D-Controls sind von System.Windows.Forms.Control abgeleitet,
damit ich meine (einfachen) DirectX-Anwendungen per Drag and Drop im
Designer zusammenklicken kann.
ich habe die onpaint-methode von meinen Controls überschrieben,
die dann die Render-Methode aufrufen, was ja auch super funktioniert.
allerdings wird mir vom Designer immer die graue Box hingezeichnet, was ich nicht möchte, da dieser meine Renderausgaben überdeckt.im konstruktor des controls habe ich folgendes gemacht:
(nach InitializeComponent)this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.SupportsTransparentBackColor,true); this.SetStyle(ControlStyles.Opaque,false); this.UpdateStyles(); this.BackColor=System.Drawing.Color.Transparent;
ich hoffte dadurch, dass er das graue "Kasterl" nicht mehr malt, aber er tut nicht so wie ich mir das erhoffte.
Vielleicht kann mir jemand sagen oder links geben, die mir weiterhelfen,
so dass ich meine controls , samt hintergrund und allem selbst zeichnen kann.
-
Ich habe nun etwas herumexperimentiert und festgestellt, dass ich
direct3d während dem entwurf wunderbar benutzen, und somit meine
controls rendern kann.
meine Direct3D-Controls sind von System.Windows.Forms.Control abgeleitet,
damit ich meine (einfachen) DirectX-Anwendungen per Drag and Drop im
Designer zusammenklicken kann.
ich habe die onpaint-methode von meinen Controls überschrieben,
die dann die Render-Methode aufrufen, was ja auch super funktioniert.
allerdings wird mir vom Designer immer die graue Box hingezeichnet, was ich nicht möchte, da dieser meine Renderausgaben überdeckt.Das klingt verrückt - mich würde der Sourcecode interessieren
hast du für jedes D3D Control ein "Komponenten" Projekt erstellt oder einfach in deiner Anwendung von System.Windows.Forms.Control abgeleitet? ...
-
so hier ist etwas sourecode von meinem "Basiscontrol".
dieses basiskontroll wird noch mit vertexbuffer und einer textur ausgestattet.
dann kann ich die eingestellte hintergrundfarbe als vertexfarbe nehmen,
die eingestellte hintergrundgrafik als textur.
als koordinaten und größe verwende ich die im designer eingestellten eigenschaften.
von diesem control möchte ich dann noch einen label ableiten,
der den Font und Text von den eigenschaften die im designer eingestellt wurden benutzt.
weiters soll dann noch ein button folgen.
das ganze soll für ganz einfache 2-D-Anwendungen sein.dieses steckt in einer DLL.
füge diese deiner toolbox hinzu, und ziehe dieses control auf ein form,
und es rendert dir mit dem eingestellten font des Formulars den Text "controller"
mittels Microsoft.DirectX.Direct3D.Font an die position, wo du das control positoniert hast.
um den text dann zu sehen, musst du das control verschieben,
und da ist mein problem.
mir ist bewusst, dass die initialisierung von direct3d noch nicht korrekt und an der falschen stelle und ohne parameter, usw.
programmiert ist, aber es war ja nur zum testen.
ich hoffe du kannst damit was anfangen, und mir vielleicht bei meinem problem helfen !using System; using System.Collections; using System.ComponentModel; using System.Drawing; using System.Data; using System.Windows.Forms; namespace DirectX.Controls { /// <summary> /// Summary description for Control. /// </summary> public class Control : System.Windows.Forms.Control { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; public Control() { // This call is required by the Windows.Forms Form Designer. InitializeComponent(); this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.SupportsTransparentBackColor,true); this.SetStyle(ControlStyles.Opaque,false); this.UpdateStyles(); this.BackColor=System.Drawing.Color.Transparent; // TODO: Add any initialization after the InitializeComponent call } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } protected override void OnPaint(PaintEventArgs e) { //base.OnPaint (e); Microsoft.DirectX.Direct3D.PresentParameters presentParams = new Microsoft.DirectX.Direct3D.PresentParameters(); presentParams.Windowed = true; presentParams.SwapEffect = Microsoft.DirectX.Direct3D.SwapEffect.Discard; // Create the device Microsoft.DirectX.Direct3D.Device device = new Microsoft.DirectX.Direct3D.Device(0, Microsoft.DirectX.Direct3D.DeviceType.Hardware, this.Parent, Microsoft.DirectX.Direct3D.CreateFlags.SoftwareVertexProcessing, presentParams); Microsoft.DirectX.Direct3D.Font fnt = new Microsoft.DirectX.Direct3D.Font(device,Parent.Font); device.BeginScene(); fnt.DrawText("controller",new System.Drawing.Rectangle(this.Location,this.Size),Microsoft.DirectX.Direct3D.DrawTextFormat.Left,System.Drawing.Color.GhostWhite); device.EndScene(); device.Present(); fnt.Dispose(); fnt = null; device.Dispose(); device=null; GC.Collect(); GC.WaitForPendingFinalizers(); } protected override void OnResize(EventArgs e) { base.OnResize (e); this.Invalidate(); } #region Component Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { components = new System.ComponentModel.Container(); } #endregion } }
-
Du erzeugst bei jedem OnPaint Event ein komplett neues Device samt Font. Findest du das nicht ein bisschen ugly?
-
pack mal in den Kunstruktor einen Aufruf der Methode Paint... mmh...
-
ja, ich weiss, dass ich jedesmal das zeug neu anlege, ich hatte auch vorhin geschrieben, ich hab das nur mal schnell getestet, und da hab ich noch nicht viel aufwand betrieben, ich wollte nur sehen obs funktioniert