int SDL_ShowMessageBox(const SDL_MessageBoxData* messageboxdata, int* buttonid)
messageboxdata | タイトル, テキスト, その他のオプションを含むSDL_MessageBoxData |
buttonid | ユーザが押したボタンのIDを代入するポインタ |
#include "SDL.h"
int main(int argc, char *argv[])
{
const SDL_MessageBoxButtonData buttons[] = {
{ /* .flags, .buttonid, .text */ 0, 0, "いいえ" },
{ SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 1, "はい" },
{ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 2, "キャンセル" },
};
const SDL_MessageBoxColorScheme colorScheme = {
{ /* .colors (.r, .g, .b) */
/* [SDL_MESSAGEBOX_COLOR_BACKGROUND] */
{ 255, 0, 0 },
/* [SDL_MESSAGEBOX_COLOR_TEXT] */
{ 0, 255, 0 },
/* [SDL_MESSAGEBOX_COLOR_BUTTON_BORDER] */
{ 255, 255, 0 },
/* [SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND] */
{ 0, 0, 255 },
/* [SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED] */
{ 255, 0, 255 }
}
};
const SDL_MessageBoxData messageboxdata = {
SDL_MESSAGEBOX_INFORMATION, /* .flags */
NULL, /* .window */
"メッセージボックスのサンプル", /* .title */
"ボタンを選択してください", /* .message */
SDL_arraysize(buttons), /* .numbuttons */
buttons, /* .buttons */
&colorScheme /* .colorScheme */
};
int buttonid;
if (SDL_ShowMessageBox(&messageboxdata, &buttonid) < 0) {
SDL_Log("メッセージボックスの表示に失敗した");
return 1;
}
if (buttonid == -1) {
SDL_Log("選択されなかった");
} else {
SDL_Log("%sが選択された", buttons[buttonid].text);
}
return 0;
}
複雑なものが必要でなければ, SDL_ShowSimpleMessageBox()を使う方が簡単かもしれない.
この関数は, 親ウィンドウが生成されたスレッド, 親ウィンドウがなければメインスレッドで呼ぶ必要がある. ユーザがボタンを押す, またはメッセージボックスを閉じるまでスレッドの実行は停止される.
この関数はSDL_Init()の前でも呼べる. このことはレンダラーやOpenGLコンテキストの生成の失敗を報告するときに役立つ.
X11では, GTK+やQtのようなツールキットではなくX11そのものでダイアログボックスを表示する.
利用できるビデオがなくSDL_Init()が失敗した場合, この関数も同じ理由で失敗することに注意する必要がある. これが問題になるならば, この関数の戻り値をチェックし, 失敗を戻したならstderrに書き込むこと.