ダイアログボックスとメニューはリソースの基本です。この2つについては、もう完璧でしょうか。 もし、不安があるのなら、p121-190を復習してください。

さて、ダイアログボックスに貼り付けるコントロール類は、CreateWindow関数で作ることも可能です。

エディットコントロールなどは、メインウィンドウのクライアント領域にCreateWindow関数で作ることがよくあります。

その他にBUTTON, COMBOBOX, LISTBOX, MDICLIENT, SCROLLBAR, STATICなどなど・・・。

作り方は

CreateWindow("クラス名",
	 "",
	 WS_CHILD | WS_VISIBLE | ...,
	 X, Y,
	 W, H, 
	親, (HMENU)ID, hInst, NULL);
となります。コントロール類は特殊な子ウィンドウなのでWS_CHILDとなります。また、WS_VISIBLEを 忘れると見えません。メニューハンドルのところは、適当なIDを定義しておきます。子ウィンドウはメニューを持つことができないのでIDに流用しているのですね。

さて、このコントロール類は、いつ作れば良いのでしょうか。たいていは、最初から存在しますね。 と、いうことはWM_CREATEメッセージが来た時に、作っておくのがよいでしょう。 また、親のウィンドウサイズが変更になった時、コントロールの位置とか大きさも変更したい場合がよくあります。これは、WM_SIZEメッセージが来た時に、位置、サイズを変更します。

コントロールウィンドウのサイズ変更には、MoveWindow関数が便利です。

とりあえずは、クライアント領域にいろいろなコントロールをCreateWindow関数で作ってみてください。これが、できたならば、そのコントロールからのメッセージを受け取る練習をしてみてください。

ここで、注意すべき重要なことがあります。あるウィンドウで起きたイベントに対しては、そのウィンドウのプロシージャにメッセージが届きます。しかし、親が興味を引きそうなメッセージは、その親にも「通知メッセージ」として送られます。通知メッセージには、WM_COMMANDの形で来るものと、WM_NOTIFYの形で送られてくるものの2種類があります。WM_COMMANDはすでに何回も使っていますね。

p455にWM_NOTIFYメッセージの解説がありますので、これはぜひともマスターしておいてください。




22/Mar/2004 By Y.Kumei
[目次に戻る] [第5日] [第7日]