前回までの状況はこちら。
最新ソースはこちら。
https://github.com/takishita2nd/Picross
ダイアログを表示するところまで行きたいのですが、
まず、ダイアログを表示するボタンを作成しなくちゃいけないので、
    class Button : ObjectBase
    {
        private string _text;
        private const int fontOffsetX = 9;
        private const int fontOffsetY = 4;
        protected bool enable = true;
        public Button(int x, int y, string text)
        {
            width = 256;
            height = 64;
            _x = x;
            _y = y;
            _text = text;
            _backTexture = new asd.TextureObject2D();
            _backTexture.Position = new asd.Vector2DF(_x, _y);
            _valueText = new asd.TextObject2D();
            _valueText.Text = _text;
            _valueText.Font = Resource.getFont();
            _valueText.Position = new asd.Vector2DF(_x + fontOffsetX, _y + fontOffsetY);
        }
        public void updateTexture(asd.Vector2DF pos)
        {
            if (pos.X > _x && pos.X < _x + width
                && pos.Y > _y && pos.Y < _y + height)
            {
                _backTexture.Texture = Resource.getButtonTexture();
            }
            else
            {
                _backTexture.Texture = null;
            }
        }
        public void setEnable(bool enable)
        {
            this.enable = enable;
        }
        public virtual void onClick()
        {
            throw new NotImplementedException();
        }
    }
Buttonクラスを作成。ほぼほぼ数独解析ツールのコードをコピーしました。
座標とかサイズは微調整していますが。
これを継承してサイズ変更ボタンを作成。
class SizeButton : Button
{
    public SizeButton() : base(10, 10, "サイズ変更")
    {
    }
    public override void onClick()
    {
        Dialog dialog = Controll.GetDialog();
        dialog.Show();
    }
}
class Controll
{
    private static Dialog _dialog = null;
    public static Dialog GetDialog()
    {
        if(_dialog == null)
        {
            _dialog = new Dialog();
            _dialog.SetEngine();
        }
        return _dialog;
    }
}
各種コントロールもシングルトン形式にすれば、アクセスが簡単になるかと思って。
class Dialog
{
    private asd.TextureObject2D _texture;
    public Dialog()
    {
        _texture = new asd.TextureObject2D();
        _texture.Position = new asd.Vector2DF(300, 300);
    }
    public void SetEngine()
    {
        asd.Engine.AddObject2D(_texture);
    }
    public void Show()
    {
        _texture.Texture = Resource.getDialogTexture();
    }
    public void Hide()
    {
        _texture.Texture = null;
    }
class PicrossUI
{
    public void Run()
    {
        asd.Engine.Initialize("ピクロス解析ツール", 1000, 800, new asd.EngineOption());
        List<Button> buttons = new List<Button>();
        var sizeButton = new SizeButton();
        asd.Engine.AddObject2D(sizeButton.getBackTexture());
        asd.Engine.AddObject2D(sizeButton.getTextObject());
        buttons.Add(sizeButton);
        while (asd.Engine.DoEvents())
        {
            asd.Vector2DF pos = asd.Engine.Mouse.Position;
            foreach (Button button in buttons)
            {
                button.updateTexture(pos);
            }
            if (asd.Engine.Mouse.LeftButton.ButtonState == asd.ButtonState.Push)
            {
                foreach (Button button in buttons)
                {
                    if (button.isClick(pos))
                    {
                        button.onClick();
                    }
                }
            }
            asd.Engine.Update();
        }
        asd.Engine.Terminate();
    }
}
ダイアログ表示とか、ボタン押下時の処理とか、本来ウインドウシステムがやっていることを、全て自前でやらなくちゃ行けないので、ちょっと面倒な事になっています。
頭がごっちゃになりそう。
デリゲートとか上手に使うと上手くいきそうな気もするんですが。
もうちょっと考えてみます。