HiMEと乙HiMEと@Wiki メッセージボックス

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

MessageBox

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

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

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

パラメータ

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

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

意味
MB_ABORTRETRYIGNORE メッセージボックスに[中止]、[再試行]、[無視]の各プッシュボタンを表示します。
MB_CANCELTRYCONTINUE Windows2000:メッセージボックスに[キャンセル]、[再実行]、[続行]の各プッシュボタンを表示します。MB_ABORTRETRYIGNOREの代わりに、このメッセージボックスタイプを使ってください。
MB_HELP Windows 95/98、WindowsNT4.0以降:メッセージボックスに[ヘルプ]ボタンを追加します。ユーザーが[ヘルプ]ボタンをクリックするかF1キーを押すと、システムはオーナーへWM_HELPメッセージを送信します。
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_DEFBUTTON2 2番目のボタンを既定のプッシュボタンにします。
MB_DEFBUTTON3 3番目のボタンを既定のプッシュボタンにします。
MB_DEFBUTTON4 4番目のボタンを既定のプッシュボタンにします。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


戻り値

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

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

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

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

解説

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

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

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

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

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

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

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

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

•リンク時に、バージョン番号として4.0を指定します。実行時にGetVersionEx関数を使って、システムのバージョンをチェックします。次いで、WindowsNT3.x環境で実行する場合はMB_SERVICE_NOTIFICATION_NT3Xを指定し、WindowsNT4.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版を実装

参照

FlashWindow,MessageBeep,MessageBoxEx,MessageBoxIndirect,SetForegroundWindow