OriosのActiveBasic講座(2-1): ウィンドウパーツ
3.ボタンウィンドウ

c.解説

前ページのプログラムの解説です。

[1] 変数の宣言

Dim hButtonWnd As HWND
【ここでやること】
ボタンウィンドウを作るために必要な変数を宣言します。
【詳しい説明】
( ) 変数の宣言
スタティックウィンドウと同様、ウィンドウハンドルを記録する変数(HWND型)を一つ宣言します。

[2] ボタンウィンドウの作成

hButtonWnd =_ CreateWindowEx( NULL, "BUTTON", "押しちゃダメ", WS_CHILD or WS_VISIBLE, 30, 30, 230, 100, hMainWnd, 0, GetModuleHandle(0), NULL )
【ここでやること】
ボタンウィンドウを作成します。
【詳しい説明】
(1) CreateWindowEx関数
スタティックウィンドウのときと同様「CreateWindowEx関数」を使用します。
(a) 拡張スタイル
省略
(b) 使用するウィンドウクラス
スタティックウィンドウのときは「STATIC」というクラスを使いましたが、ボタンウィンドウのときは「BUTTON」というクラスを使います。
(c) ウィンドウタイトル
ボタンウィンドウの場合は、表示したい文字列を指定します。
(d) ウィンドウスタイル
ウィンドウスタイル(ウィンドウの外観)を指定します。 スタティックウィンドウのときと同様、必ず「WS_CHILD」と「WS_VISIBLE」を指定します。
また、ボタンウィンドウの場合は次のウィンドウスタイルも使えます。
BS_LEFT文字列をボタンの中の左側に揃えて表示します。
BS_CENTER文字列をボタンの中の(水平方向の)中央に揃えて表示します。
BS_RIGHT文字列をボタンの中の右側に揃えて表示します。
BS_TOP文字列をボタンの中の上側に表示します。
BS_VCENTER文字列をボタンの中の(垂直方向の)中央に揃えて表示します。
BS_BOTTOM文字列をボタンの中の下側に表示します。
BS_MULTILINE文字列がボタンの大きさに対して長すぎるときに、普通なら収まらない部分が前側から順にカットされるのが、これを指定すると自動で改行して全部表示してくれます。
  • ※ ここで書いたものは最低限のものです。
(e) ウィンドウの左上のx座標(横方向の位置)
(f) ウィンドウの左上のy座標(縦方向の位置)
(g) ウィンドウの幅
(h) ウィンドウの高さ
スタティックウィンドウのときと同様、(e)(f)は親ウィンドウ(この場合文字を貼り付けられるウィンドウ)のタイトルバーと枠を除いた部分の左上を(x座標,y座標)=(0,0)と基準とした座標系で指定します。
(i) 親ウィンドウ
ボタンを貼り付けるウィンドウのウィンドウハンドルを指定します。
(j) メニューハンドル
(k) インスタンスハンドル
(l) CREATESTRUCT構造体へのポインタ
省略

[3] 表示されている文字の変更

Case WM_COMMAND If lParam = hButtonWnd Then MessageBox(NULL, "押しちゃダメって書いたのに……", "", MB_OK) SendMessage(hButtonWnd, WM_SETTEXT, 0, "もう絶対押せません。") EnableWindow(hButtonWnd, FALSE) End If
【ここでやること】
ボタンがクリックされたときにメッセージボックスを表示し、そしてボタンを無効化します。
【詳しい説明】
(1) WM_COMMANDメッセージ
(a) WM_COMMANDメッセージとは?
「WM_COMMAND」というのは、ボタンがクリックされたときや、後でする「メニュー」で選択されたときなどにコールバック関数に送られるメッセージです。
(b) lParam
今まで、「wParam」や「lParam」については詳しく説明してきませんでしたが、これは付加情報を意味します。 この「付加情報」はメッセージによって違います。 今回の「WM_COMMAND」の場合は「lParam」に押されたボタンのウィンドウハンドルが記録されています。 なので、今回のプログラムでも、「hButtonWnd」が押されたことを確認するために「lParam」を利用しています。
(2) WM_SETTEXTメッセージ
スタティックウィンドウの文字を変えるときに使いましたが、このメッセージはスタティックウィンドウだけでなく、ボタンウィンドウでも使えます。
(3) EnableWindow関数
文字が灰色になって使えなくなっているウィンドウを見たことはありませんか? このように、使用不可能になっているウィンドウを「無効化されている」と言いますが、この関数はウィンドウを「無効化」したり、逆に使用可能にしたり(有効化)する関数です。 パラメータは次の通りです。
(a) 対象ウィンドウ
無効化、もしくは有効化するウィンドウのハンドルを指定します。
(b) 無効化・有効化の指定
無効化する場合は「FALSE」を、有効化する場合は「TRUE」を指定します。

前ページ - 講座のトップ

ご質問・ご意見・ご感想・苦情等はメールまたはメイン掲示板のActiveBasic板などでお気軽にどうぞ。

ホーム > OriosのActiveBasic講座(トップページ) >