MessageBoxは、指定された文字列のメッセージボックスを表示するWindowsAPI・・・。
引数には、このメッセージボックスを所有するオーナーウィンドウのハンドル(識別IDのようなもの)、表示するテキスト、タイトル、メッセージボックスのスタイルを指定する・・・。
WinMainの頁では、"WinMain"という簡単なメッセージボックスを表示したが、
ここでは、さまざまなタイプのアイコンやボタン持ったメッセージボックスを表示する・・・。
で、今回からマルチバイト文字セットでのビルド/Unicode文字セットでのビルド、の両方に対応するために、TCHAR型に対応したコードにしていく・・・。
プロパティを見ると、
デフォルトでは、Unicodeになっている・・・。
今回からは、マルチバイトにせず、Unicodeのままでビルドしていく・・・。
(もちろん、マルチバイトにしてもTCHAR対応していればビルドはできるのだが・・・。)
詳しくは、
を見てもらうとして、
まずは、windows.hとともに、tchar.hをインクルードする・・・。
WinMainはマルチバイト用なので、TCHAR対応版の_tWinMainを使う・・・。
変数の宣言・・・。
"はい"/"いいえ"タイプのメッセージボックスや、"OK"/"キャンセル"タイプのメッセージボックスなどがあるため、
どのボタンを押されたかの状態を格納する変数を用意している・・・。
メッセージテストの開始として、まずは"はい"/"いいえ"タイプを表示する・・・。
ウィンドウハンドルは、そもそもオーナーのウィンドウがいないので、NULLでいい・・・。
テキストは、"MessageBox Test Start?"、
タイトルは、"MessageBox"、
スタイルは、ボタンが"はい"/"いいえ"なのでMB_YESNO、アイコンが?マークの疑問符なのでMB_ICONQUESTION、これをOR演算子('|')で繋げる・・・。
でよくみると、文字列リテラルみんな、
_T("<文字列リテラル>")
というように、_T("")で囲まれてる・・・。
これが文字列リテラルをTCHARに対応させる_Tマクロ・・・。
今後、特定の文字列を除く大抵の文字列はこれで囲んでいく・・・。
でメッセージボックスに戻るけど、このMB_YESNOなメッセージボックスは、
と表示される・・・。
"はい"が押されたら、
さらに、MB_OKCANCELな、
が表示される・・・。
ここで"OK"だと、
が表示される・・・。
でこのあと、if文を抜けて、
アイコンのないメッセージボックスが出て、OKを押すと終了である・・。
"キャンセル"の場合は、
と表示し、-1を返して終了・・・。
そもそも、"いいえ"だった場合は、
を表示し、-2を返して終了・・・。
こんな風にスタイルを変えることで、さまざまなメッセージボックスを表示できる・・・。
Sample/MessageBox.cpp at master · bg1bgst333/Sample · GitHub