C#による最速Splash Screenの作成

C#でSplash Screenを作る方法のメモです。Splash Screenというとアプリが起動時に表示されて消えていくアレです、DLLのロードや初期化の進捗も表示するリッチなものもありますがイメージが出て・消えていくだけのシンプルなものを最短の手数で作ってみます。

1.Windows Formsの場合

WindowsFormsの場合、SplashScreenはFormを使います。

  1. Splash対象の画像をリソースに登録
  2. 新規Formを作成後、FormBorderStyleをNoneにしBackgroundに1の画像を指定
  3. 画像ファイルに合うようFormを適宜リサイズ

Program.cs

namespace WindowsFormsAppWithSplash
{
    using System;
    using System.Windows.Forms;

    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            SplashForm splash = new SplashForm();
            splash.Show();
            var mainform = new Form1();
            mainform.Shown += (_, __) => splash.Close();
            Application.Run(mainform);
        }
    }
}

わずか3分!(実測)。ここで、MainFormのコンストラクタで必要なDLLのロードをする想定です。最速なのでフェードインフェードアウトはもちろんナシ。

 

2.WPFの場合

  1. Splash対象の画像をリソースに追加(WindowsFormsの場合と同じ)
  2. 画像ファイルを右クリック、プロパティのビルドアクションをSplashScreenに設定

wpf_splash

コードはなし!わずか30秒(実測)。こちらも重たい処理はMainFormで行う前提です。自作コードはありませんが、これはツールが吐き出してくれているから。

 App.g.cs(おそらくobjフォルダの中)

namespace WpfAppWithSplash {
    public partial class App : System.Windows.Application {
        /// <summary>
        /// Application Entry Point.
        /// </summary>
        [System.STAThreadAttribute()]
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
        public static void Main() {
            SplashScreen splashScreen = new SplashScreen("resources/penguins.jpg");
            splashScreen.Show(true);
            WpfAppWithSplash.App app = new WpfAppWithSplash.App();
            app.InitializeComponent();
            app.Run();
        }
    }
}

テキスト表示などもうちょっとサポートがあれば・・と思わなくもない。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中