hButtonWnd =_
CreateWindowEx(
NULL,
"BUTTON",
"押しちゃダメ",
WS_CHILD or WS_VISIBLE,
30, 30, 230, 100,
hMainWnd,
0,
GetModuleHandle(0),
NULL
)
ボタンウィンドウを作成します。
スタティックウィンドウのときと同様「CreateWindowEx関数」を使用します。
省略
スタティックウィンドウのときは「STATIC」というクラスを使いましたが、ボタンウィンドウのときは「BUTTON」というクラスを使います。
ボタンウィンドウの場合は、表示したい文字列を指定します。
ウィンドウスタイル(ウィンドウの外観)を指定します。
スタティックウィンドウのときと同様、必ず「
WS_CHILD」と「
WS_VISIBLE」を指定します。
また、ボタンウィンドウの場合は次のウィンドウスタイルも使えます。
BS_LEFT | 文字列をボタンの中の左側に揃えて表示します。 |
BS_CENTER | 文字列をボタンの中の(水平方向の)中央に揃えて表示します。 |
BS_RIGHT | 文字列をボタンの中の右側に揃えて表示します。 |
BS_TOP | 文字列をボタンの中の上側に表示します。 |
BS_VCENTER | 文字列をボタンの中の(垂直方向の)中央に揃えて表示します。 |
BS_BOTTOM | 文字列をボタンの中の下側に表示します。 |
BS_MULTILINE | 文字列がボタンの大きさに対して長すぎるときに、普通なら収まらない部分が前側から順にカットされるのが、これを指定すると自動で改行して全部表示してくれます。 |
スタティックウィンドウのときと同様、(e)(f)は親ウィンドウ(この場合文字を貼り付けられるウィンドウ)のタイトルバーと枠を除いた部分の左上を(x座標,y座標)=(0,0)と基準とした座標系で指定します。
ボタンを貼り付けるウィンドウのウィンドウハンドルを指定します。
省略
Case WM_COMMAND
If lParam = hButtonWnd Then
MessageBox(NULL, "押しちゃダメって書いたのに……", "", MB_OK)
SendMessage(hButtonWnd, WM_SETTEXT, 0, "もう絶対押せません。")
EnableWindow(hButtonWnd, FALSE)
End If
ボタンがクリックされたときにメッセージボックスを表示し、そしてボタンを無効化します。
「WM_COMMAND」というのは、ボタンがクリックされたときや、後でする「メニュー」で選択されたときなどにコールバック関数に送られるメッセージです。
今まで、「wParam」や「lParam」については詳しく説明してきませんでしたが、これは付加情報を意味します。
この「付加情報」はメッセージによって違います。
今回の「WM_COMMAND」の場合は「lParam」に押されたボタンのウィンドウハンドルが記録されています。
なので、今回のプログラムでも、「hButtonWnd」が押されたことを確認するために「lParam」を利用しています。
スタティックウィンドウの文字を変えるときに使いましたが、このメッセージはスタティックウィンドウだけでなく、ボタンウィンドウでも使えます。
文字が灰色になって使えなくなっているウィンドウを見たことはありませんか?
このように、使用不可能になっているウィンドウを「
無効化されている」と言いますが、この関数はウィンドウを「無効化」したり、逆に使用可能にしたり(有効化)する関数です。
パラメータは次の通りです。
無効化、もしくは有効化するウィンドウのハンドルを指定します。
無効化する場合は「FALSE」を、有効化する場合は「TRUE」を指定します。