目次 - API(機能別) - ディスプレイとウィンドウ - SDL_ShowMessageBox

# SDL_ShowMessageBox

モーダルなメッセージボックスを生成する

## 構文

`int SDL_ShowMessageBox(const SDL_MessageBoxData* messageboxdata, int* buttonid)`

## 引数

messageboxdata | タイトル, テキスト, その他のオプションを含むSDL_MessageBoxData
buttonid | ユーザが押したボタンのIDを代入するポインタ

## 戻り値

成功のとき0, 失敗のとき負の数のエラーコードを戻す. SDL_GetError()を呼んで詳細を知ることができる.

## サンプルコード

``

    #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に書き込むこと.

## バージョン

SDL 2.0.0以降

## 関連項目(関数)

SDL_ShowSimpleMessageBox

## SDL Wikiへのリンク

SDL_ShowMessageBox - SDL Wiki