hLabelWnd = _
CreateWindowEx(
NULL,
"STATIC",
"クリックすると文字が変わります。",
WS_CHILD or WS_VISIBLE,
10, 80, 290, 20,
hMainWnd,
NULL,
GetModuleHandle(0),
NULL
)
スタティックウィンドウを作成します。
皆さんは「ウィンドウ」というと、「タイトルバー」があって「閉じるボタン」とかが右についているものを想像するかもしれませんが、実は今回扱う「文字(ラベル)」を始め「ボタン」や「テキストボックス(エディットボックス)」なども全てウィンドウです。
なので、スタティックウィンドウ(文字)を作るにも「CreateWindowEx関数」を使います。
ただこういうパーツは子ウィンドウと言って、普通のウィンドウとは区別されます。
前にも書いていますが、スタティックウィンドウを作るには「CreateWindowEx関数」を使用します。
スタティックウィンドウを作るからと言って、パラメータの大半は普通のウィンドウと同じですので、同じ部分は省略して説明します。
省略
普通のウィンドウを作るときは、自分で設定したウィンドウクラスを使いましたが、スタティックウィンドウ(文字)やボタンなどを作るときは、あらかじめ用意されている専用のクラスを指定します。
スタティックウィンドウを作るときは「STATIC」というクラスを使います。
スタティックウィンドウの場合は、表示したい文字列を指定します。
ウィンドウスタイル(ウィンドウの外観)を指定します。
まず重要なのは、スタティックウィンドウを始めとする「子ウィンドウ」を作るときは必ず「
WS_CHILD」を指定することです。
これを指定しないとうまく作れません。
あと「
WS_VISIBLE」も忘れずに指定します。
また、スタティックウィンドウの場合は次のウィンドウスタイルも使えます。
SS_LEFT | 文字列を左揃えにします。 |
SS_CENTER | 文字列を中央揃えにします。 |
SS_RIGHT | 文字列を右揃えにします。 |
子ウィンドウの場合は、(e)(f)は親ウィンドウ(この場合文字を貼り付けられるウィンドウ)のタイトルバーと枠を除いた部分の左上を(x座標,y座標)=(0,0)と基準とした座標系で指定します。
あとは同じです。
子ウィンドウを貼り付けるウィンドウのウィンドウハンドルを指定します。
今回の場合、メインウィンドウにスタティックウィンドウ(文字)を貼り付けるので「hMainWnd」を指定します。
省略
Case WM_LBUTTONUP
SendMessage(hLabelWnd, WM_SETTEXT, 0, "クリックしましたね。")
ウィンドウがクリックされたときに子ウィンドウの文字を変えます。
コールバック関数のところで、ウィンドウに送られてくるメッセージの処理方法を学習しましたが、「WM_LBUTTONUP」もそういうメッセージの一つで、
ウィンドウが左クリックされたことを通知します。
ちなみに「WM_RBUTTONUP」は「右クリック」、「WM_MBUTTONUP」は「中央ボタンクリック」されたときにそれぞれ通知されます。
自分で作ったウィンドウを操作する場合には、「
SendMessage関数」を使用します。
これは、指定したウィンドウのコールバック関数にメッセージを送る関数です。
なぜ、コールバック関数にメッセージを送るとウィンドウを操作ができるかというと、スタティックウィンドウ(文字)やボタンには
あらかじめ専用のコールバック関数が用意されていているので、あらかじめ決められているメッセージを送ることで、このコールバック関数がそのメッセージに応じて文字を変えるなどの処理してくれるからです。
操作したいウィンドウのウィンドウハンドルを指定します。
送りたいメッセージを指定します。
今回は文字を変えるので「WM_SETTEXTメッセージ」を送ります。
このとき「付加情報2」に変えた後の文字列を指定してやります。
「付加情報1」は「0」で構いません。
- ※ もし興味のある方は「メインウィンドウ」がクリックされたときに「SendMessage関数」で「WM_CLOSE」(付加情報は共に「0」)をメインウィンドウ自身に送ってみましょう。
メッセージを送るということが実感できると思います。