MessageBox

https://msdn.microsoft.com/ja-jp/library/bb774305.aspx https://msdn.microsoft.com/ja-jp/library/cc428944.aspx https://msdn.microsoft.com/ja-jp/library/cc429835.aspx https://msdn.microsoft.com/ja-jp/library/cc428936.aspx https://msdn.microsoft.com/ja-jp/library/cc429002.aspx

メッセージボックスの作成、表示、操作を行います。メッセージボックスは、アプリケーション定義のタイトルとメッセージ、および任意の定義済みのアイコンとプッシュボタンの組み合わせによって構成されます。

言語識別子を指定するには、MessageBoxEx 関数を使います。

int MessageBox(
  HWND hWnd,          // オーナーウィンドウのハンドル
  LPCTSTR lpText,     // メッセージボックス内のテキスト
  LPCTSTR lpCaption,  // メッセージボックスのタイトル
  UINT uType          // メッセージボックスのスタイル
);

パラメータ

hWnd
[入力]作成したいメッセージボックスのオーナーウィンドウのハンドルを指定します。NULL を指定すると、オーナーウィンドウを持たないメッセージボックスが作成されます。
lpText
[入力]表示したいメッセージを保持する、NULL で終わる文字列へのポインタを指定します。
lpCaption
[入力]ダイアログボックスのタイトルを保持する、NULL で終わる文字列へのポインタを指定します。NULL を指定すると、既定のタイトル( 「エラー」)が表示されます。
uType
[入力]メッセージボックスの内容と動作を指定します。次のフラググループの任意の組み合わせを指定します。

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

意味
MB_ABORTRETRYIGNOREメッセージボックスに[中止]、[再試行]、[無視]の各プッシュボタンを表示します。
MB_CANCELTRYCONTINUEWindows 2000:メッセージボックスに[キャンセル]、[再実行]、[続行]の各プッシュボタンを表示します。MB_ABORTRETRYIGNORE の代わりに、このメッセージボックスタイプを使ってください。
MB_HELPWindows 95/98、Windows NT 4.0 以降:メッセージボックスに[ヘルプ]ボタンを追加します。ユーザーが[ヘルプ]ボタンをクリックするか F1 キーを押すと、システムはオーナーへ メッセージを送信します。
MB_OKメッセージボックスに[OK]プッシュボタンだけを表示します。これは既定のメッセージボックスタイプです。
MB_OKCANCELメッセージボックスに[OK]、[キャンセル]の各プッシュボタンを表示します。
MB_RETRYCANCELメッセージボックスに[再試行]、[キャンセル]の各プッシュボタンを表示します。
MB_YESNOメッセージボックスに[はい]、[いいえ]の各プッシュボタンを表示します。
MB_YESNOCANCELメッセージボックスに[はい]、[いいえ]、[キャンセル]の各プッシュボタンを表示します。

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

意味
MB_ICONEXCLAMATION,
MB_ICONWARNING
感嘆符(!)アイコンを表示します。
MB_ICONINFORMATION, MB_ICONASTERISK丸の中に小文字の「i」が描かれたアイコンを表示します。
MB_ICONQUESTION疑問符(?)アイコンを表示します。
MB_ICONSTOP,
MB_ICONERROR,
MB_ICONHAND
停止マークアイコンを表示します。

既定のプッシュボタンを表示するよう指示するには、次の値のいずれかを指定します。

意味
MB_DEFBUTTON1最初のボタンを既定のプッシュボタンにします。

MB_DEFBUTTON2、MB_DEFBUTTON3、MB_DEFBUTTON4 のいずれかが指定されていない限り、MB_DEFBUTTON1 が既定になります。

MB_DEFBUTTON22 番目のボタンを既定のプッシュボタンにします。
MB_DEFBUTTON33 番目のボタンを既定のプッシュボタンにします。
MB_DEFBUTTON44 番目のボタンを既定のプッシュボタンにします。

ダイアログボックスのモーダル状態を指示するには、次の値のいずれかを指定します。

意味
MB_APPLMODALユーザーは、メッセージボックスに応答しなければ、hWnd パラメータで指定されたウィンドウで作業を継続できません。他のスレッドのウィンドウへ移動して作業することはできます。

アプリケーション内のウィンドウの階層にもよりますが、ユーザーは、同じスレッド内の他のウィンドウへ移動できることがあります。このメッセージボックスの親ウィンドウに対するすべての子ウィンドウ( メッセージボックスの「兄弟」ウィンドウ)は、自動的に無効になりますが、ポップアップウィンドウはこの限りではありません。

MB_APPLMODAL は、MB_SYSTEMMODAL と MB_TASKMODAL のどちらも指定されていない場合の既定値です。

MB_SYSTEMMODALメッセージボックスが WS_EX_TOPMOST スタイルを備えている以外は、MB_APPLMODAL と同じです。ユーザーがすぐに対処する必要がある重大なエラー( たとえばメモリの不足)を通知するために、システムモーダルのメッセージボックスを使います。ユーザーは、hWnd に関連付けられていないウィンドウを通常の方法で操作できます。
MB_TASKMODALhWnd パラメータが NULL の場合、現在のスレッドに所属するすべてのトップレベルウィンドウが無効になること以外は、MB_APPLMODAL と同じです。呼び出し側のアプリケーションまたはライブラリが有効なウィンドウハンドルを持っておらず、かつ他のスレッドを中断せずに現在のスレッドの他のウィンドウへの入力を禁止したいときにこのフラグを使います。

これら以外のオプションの指示をするには、次の値を指定します。

意味
MB_DEFAULT_DESKTOP_ONLYWindows NT/2000:対話型のウィンドウステーションで、システムが既定のデスクトップにのみメッセージボックスを表示すること以外は、MB_SERVICE_NOTIFICATION と同じです。詳細については、MSDN ライブラリの「」およびこの関数の「解説」を参照してください。

Windows NT 4.0 以前:現在の入力デスクトップが既定のデスクトップではない場合、関数は失敗します。

Windows 2000:現在の入力デスクトップが既定のデスクトップではない場合、ユーザーが既定のデスクトップへ切り替えるまで、MessageBox は制御を返しません。

Windows 95/98:このフラグは何もしません。

MB_RIGHTテキストを右寄せします。
MB_RTLREADINGメッセージとキャプションの各テキストを右から左へ表示します。ヘブライ語やアラビア語をサポートしているシステムで有効です。
MB_SETFOREGROUNDメッセージボックスをフォアグラウンドウィンドウにします。システムは内部で、メッセージボックスに対して SetForegroundWindow 関数を呼び出します。
MB_TOPMOSTWS_EX_TOPMOST ウィンドウスタイルを指定し、メッセージボックスを最前面ウィンドウとして作成します。
MB_SERVICE_NOTIFICATIONWindows NT/2000:呼び出し側がユーザーへイベントを通知するサービスである場合に指定します。どのユーザーもコンピュータにログオンしていない場合も、この関数は現在のアクティブなデスクトップにメッセージボックスを表示します。

Terminal Services:呼び出し側のスレッドが偽装トークンを備えている場合、この関数はメッセージボックスを、偽装トークン内で指定されているセッションへリダイレクトします。

このフラグをセットするときは、hWnd パラメータに NULL を指定しなければなりません。その結果、hWnd に対応するデスクトップではなく、他のデスクトップにメッセージボックスを表示できます。

Windows NT 3.51 と Windows NT 4.0 の違いについては、この関数の「解説」を参照してください。

MB_SERVICE_NOTIFICATION_NT3XWindows NT/2000:この値は、Windows NT 3.51 で MB_SERVICE_NOTIFICATION として定義された値に対応します。

Windows NT 3.51 と Windows NT 4.0 の違いについては、この関数の「解説」を参照してください。


戻り値

関数が成功すると、次の値のいずれかが返ります。

意味
IDABORT[中止]ボタンが選択されました。
IDCANCEL[キャンセル]ボタンが選択されました。
IDCONTINUE[続行]ボタンが選択されました。
IDIGNORE[無視]ボタンが選択されました。
IDNO[いいえ]ボタンが選択されました。
IDOK[OK]ボタンが選択されました。
IDRETRY[再試行]ボタンが選択されました。
IDTRYAGAIN[再実行]ボタンが選択されました。
IDYES[はい]ボタンが選択されました。

メッセージボックスに[キャンセル]ボタンが用意されている状態で、ユーザーが Esc キーを押すか[キャンセル]ボタンを選択すると、IDCANCEL 値が返ります。メッセージボックスに[キャンセル]ボタンがない場合、Esc キーを押しても何も起こりません。

関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。

解説

システムのメモリ不足を知らせるためにシステムモーダルのメッセージボックスを作成する場合、lpText lpCaption の各パラメータが指す文字列をリソースファイルから取得するべきではありません。このような状況でリソースをロードしようとしても、失敗する可能性があります。

ダイアログボックスが表示されている場合にメッセージボックスを作成するときは、hWnd パラメータにダイアログボックスのハンドルを指定してください。hWnd パラメータで、ダイアログボックス内のコントロールなどの子ウィンドウを指定するべきではありません。

「ウィンドウステーション」などは、本書の制作時点で日本語情報が提供されていません。簡単に言うと、「ウィンドウステーション」とは、デスクトップオブジェクトやクリップボードからなる、セキュリティで保護されたオブジェクトのことです。「対話型のウィンドウステーション」とは、このうち可視状態にあり、ユーザーがキーボードやマウスを使って操作できるものです。それ以外のウィンドウステーションは、不可視状態で、ユーザーが操作できないものですが、サービスなど、ユーザインターフェイスを必要としない目的で利用できます。

「デスクトップ」とは、同じくセキュリティで保護されたオブジェクトであり、表示サーフェス、ウィンドウ、メニューなどで構成されています。1 つのウィンドウステーションの中に複数のデスクトップを用意することもできます。各アプリケーションは、モーダルの使い分けやリモートコンピュータの操作など、必要に応じてデスクトップを切り替えることができます。「既定のデスクトップ」とは、ウィンドウステーションに最初から用意されているデスクトップを意味します。上記のように、必要に応じて、1 つのウィンドウステーション内に複数のデスクトップを作成できますが、その場合、最初から存在していたデスクトップが既定のデスクトップになります。「現在の入力デスクトップ」とは、デスクトップのうち、ユーザーの入力を受け取るものを指します。「アクティブなデスクトップ」と呼ばれることもありますが、Active Desktop とは異なる概念です。

Windows 95:システムは、最大 16,364 個のウィンドウハンドルをサポートできます。

Windows NT/2000:MB_SERVICE_NOTIFICATION という値は、Windows NT 4.0 以降で利用できます。Windows NT 4.0 以降は、MessageBox の実装に当たって古い値を新しい値へマッピングすることにより、従来のサービスとの下位互換性を提供しています。このマッピングは、リンカが設定したバージョン番号が 4.0 未満である実行可能ファイルにのみ適用されます。

MB_SERVICE_NOTIFICATION を使うサービスをビルドし、Windows NT 3.x と Windows NT 4.0 以降の両方で動作させるには、次の手順のいずれかを実行します。

•リンク時に、4.0 未満のバージョン番号を指定します。

•リンク時に、バージョン番号として 4.0 を指定します。実行時に 関数を使って、システムのバージョンをチェックします。次いで、Windows NT 3.x 環境で実行する場合は MB_SERVICE_NOTIFICATION_NT3X を指定し、Windows NT 4.0 以降の環境で実行する場合は MB_SERVICE_NOTIFICATION を指定します。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダーファイル:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
Unicode:すべてのプラットフォームで Unicode 版と ANSI 版を実装

参照

, , MessageBoxEx, MessageBoxIndirect, SetForegroundWindow

表示: