LoginSignup
4
2

More than 5 years have passed since last update.

MessageBoxの使い方

Posted at

Siv3D Advent Calendar 2016 7日目の記事です。

初めに

Siv3Dにはたくさんの機能があります。しかし、あまり使用されない機能も存在します。
そこで、今回はそんな機能のひとつの、MessageBoxを紹介したいと思います。

MessageBoxとは

パソコンを使っていると警告音とともに出てくるあれです。
image

MessageBoxを使うと、簡単な選択肢を表示したり、エラーを表示したりすることができます。

Siv3DのMessageBox

表示
MessageBox::Show(L"Hello");

これでMessageBoxを表示することができます。
image

選択の取得

取得
MessageBoxCommand com = MessageBox::Show(L"Hello");

MessageBox::Showの戻り値で、何が選択されたのか取得できます。

条件分岐
#include <Siv3D.hpp>


void Main() {

    const MessageBoxCommand com = MessageBox::Show(L"Hello");

    if (com == MessageBoxCommand::Ok)
    {
        MessageBox::Show(L"Okが押されました");
    }

}


細かな設定

MessageBoxには「タイトル・本文・スタイル・既定のボタン」を設定することができます。

疑似コード
MessageBox::Show(タイトル, 本文, スタイル, 既定のボタン);
一例
MessageBox::Show(L"質問", L"嘘つきですか?", MessageBoxStyle::YesNo, 0);

スタイルを変更することで、表示されるボタンが変わります。
以下の表にスタイルの表示形式をまとめました。

スタイル 表示形式 戻り値
Ok image Ok
OkCancel image Ok・Cancel
YesNo image Yes・No
YesNoCancel image Yes・No・Cancel
RetryCancel image Retry・Cancel
CancelRetryContinue image Cancel・Retry・Continue

スタイルによって戻り値のパターンが変化します。

既定のボタンは、表示されたときに、どのボタンにカーソルを合わせているかを設定します。
例えば、スタイルがCancelRetryContinueの場合
0ならばキャンセルに
1ならば再実行に
2ならば続行に
カーソルが選択されます。

使用例

ここでは、終了確認を行うプログラムを紹介します。

終了確認
#include <Siv3D.hpp>

void Main() {

    System::SetExitEvent(WindowEvent::Manual);

    while (System::Update())
    {
        if ((System::GetPreviousEvent() & WindowEvent::CloseButton)
            || (System::GetPreviousEvent() & WindowEvent::EscapeKey))
        {
            const auto com = MessageBox::Show(L"確認", L"終了しますか?", MessageBoxStyle::YesNo, 1);

            if (com == MessageBoxCommand::Yes)
            {
                System::Exit();
            }
        }
    }

}

注意事項

MessageBoxを表示させると、メインウィンドウが予期せぬ描画になる可能性があります。

予期せぬ描画
#include <Siv3D.hpp>

void Main() {

    while (System::Update())
    {
        Circle(Mouse::Pos(), 50).draw({ 255, 0, 0, 127 });

        MessageBox::Show(L"");
    }
}

このコードを実行すると、はじめだけ真っ白な画面が表示されます。
(おそらく直前の画面が表示されるため?要検証)

また、Windows.hをSiv3D.hppの後に追加すると、MessageBoxがマクロに置き換えられ、使用できなくなります。

マクロによる置き換え
#include <Siv3D.hpp>
#include <Windows.h>

void Main() {

    //MessageBox::Show(L"");使用できない
    MessageBox(nullptr, TEXT("Hello"), TEXT("Title"), MB_OK);//置き換えられる

}

終わりに

MessageBoxの使い方を紹介しました。また、注意事項を2つ紹介しました。

明日は @LPC1768_ さんの記事です.よろしくお願いいたします.

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2