MessageBoxA 関数 (winuser.h)

システム アイコン、一連のボタン、および状態やエラー情報などのアプリケーション固有の簡単なメッセージを含むモーダル ダイアログ ボックスを表示します。 メッセージ ボックスは、ユーザーがクリックしたボタンを示す整数値を返します。

構文

int MessageBoxA(
  [in, optional] HWND   hWnd,
  [in, optional] LPCSTR lpText,
  [in, optional] LPCSTR lpCaption,
  [in]           UINT   uType
);

パラメーター

[in, optional] hWnd

型: HWND

作成するメッセージ ボックスの所有者ウィンドウへのハンドル。 このパラメーターが NULL の場合、メッセージ ボックスには所有者ウィンドウがありません。

[in, optional] lpText

種類: LPCTSTR

表示するメッセージ。 文字列が複数の行で構成されている場合は、改行文字または改行文字を使用して各行を区切ることができます。

[in, optional] lpCaption

種類: LPCTSTR

ダイアログ ボックスのタイトル。 このパラメーターが NULL の場合、既定のタイトルは Error です

[in] uType

型: UINT

ダイアログ ボックスの内容と動作。 このパラメーターには、次のフラグ グループのフラグの組み合わせを指定できます。

メッセージ ボックスに表示されるボタンを示すには、次のいずれかの値を指定します。

説明
MB_ABORTRETRYIGNORE
0x00000002L
メッセージ ボックスには、 AbortRetryIgnore の 3 つのプッシュ ボタンが含まれています。
MB_CANCELTRYCONTINUE
0x00000006L
メッセージ ボックスには、 CancelTry AgainContinue の 3 つのプッシュ ボタンが含まれています。 MB_ABORTRETRYIGNOREの代わりに、このメッセージ ボックスの種類を使用します。
MB_HELP
0x00004000L
メッセージ ボックスに [ヘルプ ] ボタンを追加します。 ユーザーが [ヘルプ ] ボタンをクリックするか F1 キーを押すと、システムは 所有者にWM_HELP メッセージを送信します。
MB_OK
0x00000000L
メッセージ ボックスには、[ OK] という 1 つのプッシュ ボタンが含まれています。 既定値です。
MB_OKCANCEL
0x00000001L
メッセージ ボックスには、[ OK][キャンセル] の 2 つのプッシュ ボタンが含まれています。
MB_RETRYCANCEL
0x00000005L
メッセージ ボックスには、 再試行キャンセルの 2 つのプッシュ ボタンが含まれています。
MB_YESNO
0x00000004L
メッセージ ボックスには、[ はい ] と [いいえ] の 2 つのプッシュ ボタンが含まれています。
MB_YESNOCANCEL
0x00000003L
メッセージ ボックスには、[ はい]、[ いいえ]、[ キャンセル] の 3 つのプッシュ ボタンが含まれています。
 

メッセージ ボックスにアイコンを表示するには、次のいずれかの値を指定します。

説明
MB_ICONEXCLAMATION
0x00000030L
感嘆符アイコンがメッセージ ボックスに表示されます。
MB_ICONWARNING
0x00000030L
感嘆符アイコンがメッセージ ボックスに表示されます。
MB_ICONINFORMATION
0x00000040L
メッセージ ボックスに、円の中の小文字 i で構成されるアイコンが表示されます。
MB_ICONASTERISK
0x00000040L
メッセージ ボックスに、円の中の小文字 i で構成されるアイコンが表示されます。
MB_ICONQUESTION
0x00000020L
メッセージ ボックスに疑問符アイコンが表示されます。 疑問符は、質問の特定の種類を明確に表さず、メッセージの言い回しはどのメッセージの種類にも適用されるため、疑問符のメッセージ アイコンは推奨されなくなりました。 さらにユーザーは、疑問符のメッセージ シンボルをヘルプ情報と混同することがあります。 したがって、メッセージ ボックスには疑問符のメッセージ シンボルを使用しないでください。 システムは引き続き、下位互換性のためだけに、その組み込みをサポートします。
MB_ICONSTOP
0x00000010L
メッセージ ボックスに停止記号アイコンが表示されます。
MB_ICONERROR
0x00000010L
メッセージ ボックスに停止記号アイコンが表示されます。
MB_ICONHAND
0x00000010L
メッセージ ボックスに停止記号アイコンが表示されます。
 

既定のボタンを示すには、次のいずれかの値を指定します。

説明
MB_DEFBUTTON1
0x00000000L
最初のボタンは既定のボタンです。

MB_DEFBUTTON2、MB_DEFBUTTON3、またはMB_DEFBUTTON4が指定されていない限り、MB_DEFBUTTON1が既定値です。

MB_DEFBUTTON2
0x00000100L
2 番目のボタンは既定のボタンです。
MB_DEFBUTTON3
0x00000200L
3 番目のボタンは既定のボタンです。
MB_DEFBUTTON4
0x00000300L
4 番目のボタンは既定のボタンです。
 

ダイアログ ボックスのモダリティを示すには、次のいずれかの値を指定します。

説明
MB_APPLMODAL
0x00000000L
ユーザーは、hWnd パラメーターで識別されるウィンドウで作業を続行する前に、メッセージ ボックスに応答する必要があります。 ただし、ユーザーは他のスレッドのウィンドウに移動し、それらのウィンドウで作業できます。

アプリケーション内のウィンドウの階層によっては、ユーザーがスレッド内の他のウィンドウに移動できる場合があります。 メッセージ ボックスの親のすべての子ウィンドウは自動的に無効になりますが、ポップアップ ウィンドウは無効です。

MB_SYSTEMMODALもMB_TASKMODALも指定しない場合、MB_APPLMODALが既定値です。

MB_SYSTEMMODAL
0x00001000L
MB_APPLMODALと同じですが、メッセージ ボックスには WS_EX_TOPMOST スタイルがあります。 システム モーダル メッセージ ボックスを使用して、すぐに注意が必要な重大な、潜在的に損害を与える可能性のあるエラー (メモリ不足など) をユーザーに通知します。 このフラグは、 hWnd に関連付けられているウィンドウ以外のウィンドウを操作するユーザーの機能には影響しません。
MB_TASKMODAL
0x00002000L
MB_APPLMODALと同じですが、hWnd パラメーターが NULL の場合、現在のスレッドに属するすべての最上位ウィンドウは無効になります。 呼び出し元のアプリケーションまたはライブラリに使用可能なウィンドウ ハンドルがないのに、他のスレッドを中断せずに呼び出し元スレッド内の他のウィンドウへの入力を防ぐ必要がある場合は、このフラグを使用します。
 

その他のオプションを指定するには、次の値の 1 つ以上を使用します。

説明
MB_DEFAULT_DESKTOP_ONLY
0x00020000L
対話型ウィンドウ ステーションのデスクトップと同じです。 詳細については、「 ウィンドウ ステーション」を参照してください。

現在の入力デスクトップが既定のデスクトップでない場合、ユーザーが既定のデスクトップに切り替わるまで MessageBox は戻りません。

MB_RIGHT
0x00080000L
テキストは右揃えです。
MB_RTLREADING
0x00100000L
ヘブライ語とアラビア語のシステムで右から左への読み取り順序を使用して、メッセージとキャプションテキストを表示します。
MB_SETFOREGROUND
0x00010000L
メッセージ ボックスがフォアグラウンド ウィンドウになります。 内部的には、システムはメッセージ ボックスに対して SetForegroundWindow 関数を呼び出します。
MB_TOPMOST
0x00040000L
メッセージ ボックスは、 WS_EX_TOPMOST ウィンドウ スタイルで作成されます。
MB_SERVICE_NOTIFICATION
0x00200000L
呼び出し元は、ユーザーにイベントを通知するサービスです。 この関数は、コンピューターにログオンしているユーザーがいない場合でも、現在アクティブなデスクトップにメッセージ ボックスを表示します。

ターミナル サービス: 呼び出し元のスレッドに偽装トークンがある場合、関数はメッセージ ボックスを偽装トークンで指定されたセッションに転送します。

このフラグが設定されている場合、 hWnd パラメーターは NULL である必要があります。 これは、 hWnd に対応するデスクトップ以外のデスクトップにメッセージ ボックスを表示できるようにするためです。

このフラグの使用に関するセキュリティに関する考慮事項については、「 Interactive Services」を参照してください。 特に、このフラグはロックされたデスクトップで対話型コンテンツを生成できるため、リソースの枯渇など、非常に限られたシナリオのセットにのみ使用する必要があることに注意してください。

戻り値

型: int

メッセージ ボックスに [キャンセル] ボタンがある場合、ESC キーを押すか、[キャンセル] ボタンが選択されている場合、関数は IDCANCEL 値を返します。 メッセージ ボックスに [キャンセル ] ボタンがない場合、esc キーを押しても効果はありません。MB_OK ボタンがない限り、 MB_OK ボタンが表示され、ユーザーが ESC キーを押すと、戻り値は IDOK になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

関数が成功した場合、戻り値は次のいずれかのメニュー項目値になります。

リターン コード/値 Description
IDABORT
3
[ 中止] ボタンが選択されました。
IDCANCEL
2
[キャンセル] ボタンが選択されました。
IDCONTINUE
11
[ 続行 ] ボタンが選択されました。
IDIGNORE
5
[無視] ボタンが選択されました。
IDNO
7
[ いいえ ] ボタンが選択されました。
IDOK
1
[OK] ボタンが選択されました。
IDRETRY
4
[ 再試行 ] ボタンが選択されました。
IDTRYAGAIN
10
[ 再試行] ボタンが選択されました。
IDYES
6
[ はい ] ボタンが選択されました。

解説

次のシステム アイコンは、 uType パラメーターを対応するフラグ値に設定することで、メッセージ ボックスで使用できます。

アイコン フラグの値
MB_ICONHAND、MB_ICONSTOP、MB_ICONERRORのアイコン MB_ICONHANDMB_ICONSTOP、または MB_ICONERROR
MB_ICONQUESTIONのアイコン MB_ICONQUESTION
MB_ICONEXCLAMATIONとMB_ICONWARNINGのアイコン MB_ICONEXCLAMATION または MB_ICONWARNING
MB_ICONASTERISKとMB_ICONINFORMATIONのアイコン MB_ICONASTERISK または MB_ICONINFORMATION
 

Unicode 書式設定文字 U+200F で表される 2 つの右から左のマーク (RLM) を MessageBox 表示文字列の先頭に追加すると、MessageBox の読み取り順序が右から左 (RTL) としてレンダリングされるように MessageBox レンダリング エンジンによって解釈されます。

システム モーダル メッセージ ボックスを使用してシステムのメモリが不足していることを示す場合、リソースの読み込みが失敗する可能性があるため、 lpText パラメーターと lpCaption パラメーターが指す文字列をリソース ファイルから取得しないでください。

ダイアログ ボックスが存在する間にメッセージ ボックスを作成する場合は、ダイアログ ボックスのハンドルを hWnd パラメーターとして使用します。 hWnd パラメーターは、ダイアログ ボックス内のコントロールなどの子ウィンドウを識別しないでください。

次の例では、エラー条件が発生した後にユーザーにアクションを求めるメッセージ ボックスがアプリケーションに表示されます。 メッセージ ボックスには、エラー条件とその解決方法を説明するメッセージが表示されます。 MB_CANCELTRYCONTINUEスタイルは、ユーザーが続行する方法を選択できる 3 つのボタンを提供するように MessageBox に指示します。 MB_DEFBUTTON2 スタイルでは、メッセージ ボックスの 2 番目のボタン (この場合は [再試行] ボタン) に既定のフォーカスが設定されます。

int DisplayResourceNAMessageBox()
{
    int msgboxID = MessageBox(
        NULL,
        (LPCWSTR)L"Resource not available\nDo you want to try again?",
        (LPCWSTR)L"Account Details",
        MB_ICONWARNING | MB_CANCELTRYCONTINUE | MB_DEFBUTTON2
    );

    switch (msgboxID)
    {
    case IDCANCEL:
        // TODO: add code
        break;
    case IDTRYAGAIN:
        // TODO: add code
        break;
    case IDCONTINUE:
        // TODO: add code
        break;
    }

    return msgboxID;
}

次の図は、前のコード例からの出力を示しています。

メッセージ ボックス

別のメッセージ ボックスの例については、「 メッセージ ボックスの表示」を参照してください。

注意

winuser.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして MessageBox を定義します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll
API セット ext-ms-win-ntuser-dialogbox-l1-1-0 (Windows 8 で導入)

関連項目

概念

ダイアログ ボックス

FlashWindow

MessageBeep

MessageBoxEx

MessageBoxIndirect

その他のリソース

リファレンス

SetForegroundWindow