2017年11月28日火曜日

C#でフルスクリーン

 C#のFormをフルスクリーンにするクラス。

 .NET TIPS:Windowsアプリケーションをフルスクリーンで表示するには? - @IT

 基本的にこのページのコピペだが、フルスクリーン/ウィンドウを切り替えるとFormサイズが変化してしまう不具合の部分だけ、修正してある。

 コンストラクタとメソッド3個しかないので、説明しなくても使えるはず。内容もそんなに大変じゃないはず。動作が知りたいなら上記リンクを参照。

public partial class Form1 : Form
{
    readonly Full_screen_controller full_screen;

    public Form1()
    {
        InitializeComponent();

        full_screen = new Full_screen_controller(this);
    }

    private void button1_Click(Object sender, EventArgs e)
    {
        full_screen.toggle_screen_mode();
    }

    private void button2_Click(Object sender, EventArgs e)
    {
        full_screen.to_full_screen();
    }

    private void button3_Click(Object sender, EventArgs e)
    {
        full_screen.to_window();
    }
}

class Full_screen_controller
{
    private readonly Form form = null;
    public bool is_full_screen_mode { get; private set; } = false;
    private FormWindowState previous_form_state;
    private FormBorderStyle previous_form_style;
    private Size previous_form_size;

    public Full_screen_controller(Form form)
    {
        this.form = form;
    }

    public void to_full_screen()
    {
        if (!is_full_screen_mode)
        {
            is_full_screen_mode = true;
            previous_form_state = form.WindowState;
            previous_form_style = form.FormBorderStyle;

            if (form.WindowState == FormWindowState.Maximized)
            {
                form.WindowState = FormWindowState.Normal;
            }

            previous_form_size = form.Size;

            form.FormBorderStyle = FormBorderStyle.None;
            form.WindowState = FormWindowState.Maximized;
        }
    }

    public void to_window()
    {
        if (is_full_screen_mode)
        {
            is_full_screen_mode = false;

            if (previous_form_state == FormWindowState.Maximized)
            {
                form.WindowState = FormWindowState.Normal;
            }
            else
            {
                form.Size = previous_form_size;
            }

            form.FormBorderStyle = previous_form_style;
            form.WindowState = previous_form_state;
        }
    }

    public void toggle_screen_mode()
    {
        if (!is_full_screen_mode)
        {
            to_full_screen();
        }
        else
        {
            to_window();
        }
    }
}


 そういえば、いちおうJSF++に則った雰囲気の書き方?だけど、JSF++だと大文字と小文字で区別しちゃいけないんだよな。ということで、「型名の最初の1文字は常に大文字」+「インスタンスは常に小文字」で区別するのはルール違反のはず。もっとも、基本的にクラス名とインスタンス名を間違えても、大抵はコンパイラでエラーになるので、バグにつながる危険性は少なそう。
 このあたりは実際の使用例を見てみないとなんとも。とはいえF-35のソースコードってオープンソースになってる部分とかあるんだろうか?機密的に言えば、単なる算術ライブラリとかは全く機密には当たらないけど、各国の税金で作ったものを(仮想敵国も含めた)全世界で共有する、というのは無いだろうなぁ。

0 件のコメント:

コメントを投稿