Siv3D Advent Calendar 2016 7日目の記事です。
#初めに
Siv3Dにはたくさんの機能があります。しかし、あまり使用されない機能も存在します。
そこで、今回はそんな機能のひとつの、MessageBoxを紹介したいと思います。
#MessageBoxとは
パソコンを使っていると警告音とともに出てくるあれです。
MessageBoxを使うと、簡単な選択肢を表示したり、エラーを表示したりすることができます。
#Siv3DのMessageBox
MessageBox::Show(L"Hello");
#選択の取得
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_ さんの記事です.よろしくお願いいたします.