Posted at
Siv3DDay 7

MessageBoxの使い方

More than 1 year has passed since last update.

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


初めに

Siv3Dにはたくさんの機能があります。しかし、あまり使用されない機能も存在します。

そこで、今回はそんな機能のひとつの、MessageBoxを紹介したいと思います。


MessageBoxとは

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

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


Siv3DのMessageBox


表示

MessageBox::Show(L"Hello");


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


選択の取得


取得

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


Ok

OkCancel


Ok・Cancel

YesNo


Yes・No

YesNoCancel


Yes・No・Cancel

RetryCancel


Retry・Cancel

CancelRetryContinue


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_ さんの記事です.よろしくお願いいたします.