MessageBox

MessageBoxは、指定された文字列のメッセージボックスを表示するWindowsAPI・・・。

MessageBox 関数

引数には、このメッセージボックスを所有するオーナーウィンドウのハンドル(識別IDのようなもの)、表示するテキスト、タイトル、メッセージボックスのスタイルを指定する・・・。

WinMainの頁では、"WinMain"という簡単なメッセージボックスを表示したが、
ここでは、さまざまなタイプのアイコンやボタン持ったメッセージボックスを表示する・・・。

で、今回からマルチバイト文字セットでのビルド/Unicode文字セットでのビルド、の両方に対応するために、TCHAR型に対応したコードにしていく・・・。

プロパティを見ると、

f:id:BG1:20150305123558j:plain

デフォルトでは、Unicodeになっている・・・。
今回からは、マルチバイトにせず、Unicodeのままでビルドしていく・・・。
(もちろん、マルチバイトにしてもTCHAR対応していればビルドはできるのだが・・・。)

詳しくは、

Tchar.h における汎用テキストのマッピング

を見てもらうとして、
まずは、windows.hとともに、tchar.hをインクルードする・・・。

WinMainはマルチバイト用なので、TCHAR対応版の_tWinMainを使う・・・。

変数の宣言・・・。

"はい"/"いいえ"タイプのメッセージボックスや、"OK"/"キャンセル"タイプのメッセージボックスなどがあるため、
どのボタンを押されたかの状態を格納する変数を用意している・・・。

メッセージテストの開始として、まずは"はい"/"いいえ"タイプを表示する・・・。

ウィンドウハンドルは、そもそもオーナーのウィンドウがいないので、NULLでいい・・・。
テキストは、"MessageBox Test Start?"、
タイトルは、"MessageBox"、
スタイルは、ボタンが"はい"/"いいえ"なのでMB_YESNO、アイコンが?マークの疑問符なのでMB_ICONQUESTION、これをOR演算子('|')で繋げる・・・。

でよくみると、文字列リテラルみんな、

_T("<文字列リテラル>")

というように、_T("")で囲まれてる・・・。
これが文字列リテラルをTCHARに対応させる_Tマクロ・・・。
今後、特定の文字列を除く大抵の文字列はこれで囲んでいく・・・。

でメッセージボックスに戻るけど、このMB_YESNOなメッセージボックスは、

f:id:BG1:20150305133816p:plain

と表示される・・・。
"はい"が押されたら、

さらに、MB_OKCANCELな、

f:id:BG1:20150305134117p:plain

が表示される・・・。
ここで"OK"だと、

f:id:BG1:20150305134322p:plain

が表示される・・・。
でこのあと、if文を抜けて、

f:id:BG1:20150305134618p:plain

アイコンのないメッセージボックスが出て、OKを押すと終了である・・。

"キャンセル"の場合は、

f:id:BG1:20150305134912p:plain

と表示し、-1を返して終了・・・。

そもそも、"いいえ"だった場合は、

f:id:BG1:20150305135547p:plain

を表示し、-2を返して終了・・・。

こんな風にスタイルを変えることで、さまざまなメッセージボックスを表示できる・・・。

Sample/MessageBox.cpp at master · bg1bgst333/Sample · GitHub