Benutzer mit den meisten Antworten
Frage zu Aussehen WinForm - Splash/Login-Form

Frage
-
Hallo
ich hätte eine Frage zum Aussehen einer WinForm-Anwendung - und zwar habe ich einen sogenannten Splash-Screen, der auch zur Anmeldung für die Applikation dient. Ich habe schon abgerundete Ecken via
[DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")] private static extern IntPtr CreateRoundRectRgn ( int nLeftRect, // x-coordinate of upper-left corner int nTopRect, // y-coordinate of upper-left corner int nRightRect, // x-coordinate of lower-right corner int nBottomRect, // y-coordinate of lower-right corner int nWidthEllipse, // height of ellipse int nHeightEllipse // width of ellipse ); [DllImport("gdi32.dll", EntryPoint = "DeleteObject")] private static extern bool DeleteObject(System.IntPtr hObject); private void FormLogon_Paint(object sender, PaintEventArgs e) { System.IntPtr ptr = CreateRoundRectRgn(0, 0, this.Width, this.Height, _BorderRadius, _BorderRadius); // _BoarderRaduis can be adjusted to your needs, try 15 to start. this.Region = System.Drawing.Region.FromHrgn(ptr); DeleteObject(ptr); }
eingefügt. Schaut mal ganz nett aus, aber .....
Jetzt hätte ich noch die Frage zum Layout - ob es sich mit einem Schatten umrandet darstellen lässt ? - Im Grund hätte ich gerne die Darstellung wie zum Beispiel der Splash-Screen der Microsoft-Expression-Applikationen oder der Office-2010-Anwendung.
Ist so etwas bei einer WinForm möglich??
Vielen Dank schon mal & schönen Gruß
Michael
Michael Erlinger
Antworten
-
Hallo Michael,
hier zum Beispiel ein Schatten-Effekt (mit Durchsichtigkeit) über Alphablending in einem Bitmap:
[C# Splash Screen - Visual C# Kicks]
http://www.vcskicks.com/splash-screen.php#wobei man das durch ein Überscheiben in CreateParams durch WS_EX_LAYERED (cp.ExStyle |= 0x00080000) erwirken kann. Dazu führt man im Paint letztlich die UpdateLayeredWindow API aus.
WPF hat da natürlich bessere Karten.
ciao Frank- Als Antwort markiert M.Erlinger Montag, 3. Januar 2011 13:36
-
Hallo Michael,
Da kannst Du zum Beispiel eine neue Form (name sei mal: Aufsatz.cs) darübersetzen ... Pseudo-Code etwa:
public partial class Aufsatz : Form { public Aufsatz() { InitializeComponent(); this.TopMost = true; this.TransparencyKey = Color.Yellow; this.BackColor = Color.Yellow; this.FormBorderStyle = FormBorderStyle.None; this.StartPosition = FormStartPosition.CenterScreen; this.ShowInTaskbar = false; } // .... Deine TextBox, ComboBox, etc. in die Form einfügen }
im frmSplash dann etwas wie:
private void Form1_Load(object sender, EventArgs e) { UpdateFormDisplay(this.BackgroundImage); new Aufsatz().Show(this); }
ciao Frank- Als Antwort markiert M.Erlinger Montag, 3. Januar 2011 13:36
Alle Antworten
-
Hallo Michael,
hier zum Beispiel ein Schatten-Effekt (mit Durchsichtigkeit) über Alphablending in einem Bitmap:
[C# Splash Screen - Visual C# Kicks]
http://www.vcskicks.com/splash-screen.php#wobei man das durch ein Überscheiben in CreateParams durch WS_EX_LAYERED (cp.ExStyle |= 0x00080000) erwirken kann. Dazu führt man im Paint letztlich die UpdateLayeredWindow API aus.
WPF hat da natürlich bessere Karten.
ciao Frank- Als Antwort markiert M.Erlinger Montag, 3. Januar 2011 13:36
-
Hallo Frank
danke für Deine Rückmeldung.
Das Beispiel basiert ja eigentlich schon auf einer PNG-Grafik, die schon mit Schatten umrandet dargestellt wird. Controls können dann nachträglich nicht mehr auf die Form gezogen werden.
Ich müsse noch 2 TextEdit-Control, eine ComboBox und 2 Buttons auf die Form plazieren.................
Schönen Gruß
Michael
Michael Erlinger -
Hallo Michael,
Da kannst Du zum Beispiel eine neue Form (name sei mal: Aufsatz.cs) darübersetzen ... Pseudo-Code etwa:
public partial class Aufsatz : Form { public Aufsatz() { InitializeComponent(); this.TopMost = true; this.TransparencyKey = Color.Yellow; this.BackColor = Color.Yellow; this.FormBorderStyle = FormBorderStyle.None; this.StartPosition = FormStartPosition.CenterScreen; this.ShowInTaskbar = false; } // .... Deine TextBox, ComboBox, etc. in die Form einfügen }
im frmSplash dann etwas wie:
private void Form1_Load(object sender, EventArgs e) { UpdateFormDisplay(this.BackgroundImage); new Aufsatz().Show(this); }
ciao Frank- Als Antwort markiert M.Erlinger Montag, 3. Januar 2011 13:36
-
Das ganze lässt sich alles relativ einfach über WPF machen. Windows Forms-Anwendungen sind dafür einfach zu unflexibel. Bei WPF ist man beim Design völlig unabhängig da es in der Beschreibungssprache XAML geschrieben wird. Da sind abgerundete Ecken und Schatten einfache Spielereien ;o). Auch wenn das bei deiner Frage jetzt nicht mehr weiterhilft da du sicherlich schon auf Windows Forms festgelegt hast. Aber fürs nächste mal vielleicht...
Was mit WPF alles so möglich ist kann man auch hier sehen:
http://windowsclient.net/community/showcase.aspx
Übrigens sind die Windows Expression Anwendungen auch mit XAML designed und sehen deswegen so hübsch aus :o).
-
Hallo
vielen Dank für Deine Rückmeldung. Mir ist schon klar, dass mit WinForms ich an Grenzen gebunden bin. Wäre es denn nicht auch möglich, das eine Fenster als WPF zu erstellen, und in die bestehende Applikation einzubinden ?
Oder spricht hier etwas dagegen, wenn eine Appl. WinForms und WPF zu mischen beginnt.........
Danke & schönen Gruß
Michael
Michael Erlinger -
naja ne WPF Form nicht direkt... aber nen WPF Control was du dann auf eine Winform setzen kannst.. die Windows Forms kannst du ja dann transparent machen.. das man nur noch das WPF-Control sieht... kannst ja mal hier schauen:
http://nayyeri.net/host-wpf-controls-in-windows-forms
-
Hallo Michael,
> Oder spricht hier etwas dagegen, wenn eine Appl. WinForms und WPF zu mischen beginnt.........
das es mit WPF leichter geht sagte ich bereits, aber das Mischen von WPF und WinForms hat so seine "Grenzen".
Erreichen kannst Du WPF in WinForms oder WinForms-in-WPF immer leicht durch ElementHost oder WindowsFormsHost.
Es kommen aber Fokus-und Selektions- und Transparenz-Probleme hinzu, da immer nur eine Technologie (entweder WPF oder Winforms) das Control eben rendert.
Was ist mit meinem Vorschlag (Aufsatz.cs) ? Da er funktioniert, würde ich jetzt nicht unbedingt wieder was neues machen.
Gut, wenn Du Zeit hast, ist das natürlich ein Mehr an Wissen zumindest.
Also empfehlen kann ich WPF als alleinige Technologie allemal, nur ob es in Deine Zeitplanung passt - weiß ich natürlich nicht!
ciao Frank -
Hallo Frank
Du hast recht - die Zeit ist jetzt nicht dafür da, in der bestehenden Applikation WPF-Elemente zu implementieren, und damit herum zu probieren.
Werde Deinen Lösungs-Ansatz vorziehen; und WPF kommt sowieso bei einem der nächsten neuen Projekte zum Zug.
Vielen Dank & schönen Gruß
Michael
Michael Erlinger