はじめてのYaneSDK.NET番外編2

akiramei2006-04-08

今回は埋め込みリソースをSDLWindowのアイコンに設定してみます。
.NETのアセンブリに埋め込まれたアイコンを読み込むためにAssemblyクラスを使っています。YaneSDKとはあまり関係ないところなのでここでは触れません。詳しく知りたい方は画像やテキストファイルを実行ファイルに埋め込む - .NET Tips (VB.NET,C#...)が参考になると思います。流れとしては、

  1. アセンブリから埋め込みリソース(アイコン)を取得
  2. アイコンをビットマップに変換
  3. ビットマップをサーフェスに変換
  4. SDL_WM_SetIconを呼び出す

となっています。

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Drawing;

using YD = Yanesdk.Draw;

namespace Sample8
{
    static class Program
    {
        static void Main()
        {
            YD.SDLWindow window = new YD.SDLWindow();
            window.SetCaption("YaneSDK");
            // 実行アセンブリを取得
            Assembly asm = Assembly.GetExecutingAssembly();
            // アセンブリに埋め込まれているアイコンを取得
            Icon icon = new Icon(asm.GetManifestResourceStream("Sample8.Icon1.ico"));
            // アイコンをサーフェスに変換
            YD.Surface surface;
            YD.BitmapHelper.BitmapToSurface(icon.ToBitmap(), out surface);
            // 変換したサーフェスをSDLWindowのアイコンにする
            // YaneSDKはwindow.SetIcon(Surface)をサポートしていないのでSDLを直接呼ぶ
            Sdl.SDL.SDL_WM_SetIcon(surface.SDL_Surface, IntPtr.Zero);

            window.BeginScreenTest();
            window.TestVideoMode(640, 480, 0);
            window.EndScreenTest();

            while (YD.SDLFrame.PollEvent() == Yanesdk.Ytl.YanesdkResult.NoError)
            {
                // メインループ...
                window.Screen.SetClearColor(255, 255, 255);
                window.Screen.Clear();
                window.Screen.Update();
            }
        }
    }
}