Splash screen

By dose | September 15, 2005
Under: technical stuff, Uncategorized

Heute möchte ich die Programmierung eines Splash-screens unter WIN32 näher beleuchten.
Kennt sicher jeder: Die schönen Grafiken, die während des Ladeprozesses eines Programms am Schirm erscheinen, z.B. beim Starten von Visual Studio.

Im Prinzip handelt es sich hierbei einfach um ein TOPMOST – Fenster, welches eine Grafik beinhaltet, auf der idealerweise auch dynamisch die Versionsinformation über das Programm angezeigt wird. Die Grafik wird beim Starten entweder nach dem Ladevorgang oder nach einer festgelegten Zeitspanne (z.B. 2 Sekunden) ausgeblendet.

Wie geht man sowas nun an?
Grundsätzlich muss man die WM_PAINT Nachricht eines neuen, leeren Fensters dispatchen. Dieses Fenster wird in der Größe nun an die Größe des zu ladenden Splash-screen Bitmaps angepasst (im unteren Beispiel befindet sich das in der Ressourcen als IDB_SPLASH) und das Fenster anschließend zentriert.
Nun kopiert man das Bitmap in den DC des Fensters.
So weit, so gut! Nun wäre es aber noch interessant die Versionsinformationen auszugeben.
Hierzu kann man ja praktischerweise gleich meine QueryResource – Klasse verwenden.
Zuerst muss nun der Font und die Schriftgröße, sowie die Schriftfarbe bestimmt werden.
Anschließend wird der Text an die angegebene Position innerhalb des Bitmaps gezeichnet.
Das war’s im Prinzip mit dem Zeichnen.

Nun sollte man noch dafür sorgen, dass der Splashscreen bei entsprechenden Aktionen
verschwindet, z.B. beim Klicken oder nach Ablauf einer bestimmten Zeit.
Um den Splashscreen nach einer bestimmten Zeitspanne verschwinden zu lassen, installiert man am Besten einen Timer in der Initialisierungsroutine des Fensters (WM_CREATE) mittels der SetTimer Funktion.
Idealerweise lassen wir den Aufrufer der Dialoprozedur selbst das Timeout angeben. Der an die Dialogbox übergebene Wert befindet sich bei einem Standard-Fenster innerhalb der in lParam übergebenen Struktur CREATESTRUCT und zwar im Member lpCreateParams.
Dieser Parameter wird als letzter Parameter beim Erstellen des Fensters der CreateWindowEx – Funktion übergeben.
Beim Erstellen des Fensters macht es Sinn, den Flag WS_EX_TOPMOST als Windowstyle anzugeben, damit das Fenster zu oberst erscheint.

Im untenstehenden Codeschnipsel befindet sich nun eine fertige, von mir entwickelte Splash-screen Lösung. Ich habe alle Stellen im Code mit dem Kommentar EDITME gekennzeichnet, welche entsprechend angepasst gehören, um die Routine für seine eigenen Zwecke weiterverwenden zu können. Außerdem wird hier meine QueryResource – Klasse zum Auslesen der Versionsinfos verwendet, diese wird als ggf. auch benötigt.
Ansonsten: Viel Spaß damit!
Wenn’s Fragen dazu geben sollte, einfach als Kommentar posten 🙂

Leave a Comment

Name:

E-Mail :

Subscribe :
Website :

Comments :