子ウインドウ多くのWindowsアプリケーションはユーザーの操作を支援するために、コントロールをウインドウに表示しています。多くのユーザーはこうしたコントールの使い方に慣れています。標準のコントロールを表示した方がよいといえます。コントロールの正体は、子ウインドウです。既存のウインドウの子ウインドウという位置づけになっています。この既存のウインドウは、子ウインドウの親ウインドウになります。親ウインドウが作成されていなければ、コントロールを作成することはできません。親ウインドウが破棄された場合は、コントロールも同時に破棄されます。いくつかの引数の指定は親ウインドウと異なるため、そこを重点的に見ていきます。NULL);第2引数には、コントロールのウインドウクラスの名前を指定します。ここでは、BUTTONという文字列を指定していますが、これがボタンのウインドウクラスの名前です。このCreateWindowExでボタンというコントロールが作成されることになります。第4引数は、コントロールのウインドウスタイルを指定します。WS_VISIBLEはウインドウを作成すると同時に表示することを意味します。第9引数は、親ウインドウのハンドルを指定することになります。第10引数は、コントロールのIDを指定します。コントロールを複数作成する場合は、このIDでコントロールを識別することになります。コントロールを作成する場合はこうした作業は必要ありません。理由は、コントロールのウインドウクラスが予め登録されているからです。次に、コントロールの種類とウインドウクラスの名前を示します。WC_PAGESCROLLER専用の定義というのは、単に文字列を定数化したものに過ぎません。"BUTTON"の代わりにWC_BUTTONを指定することもできます。専用の定義を指定する場合は、commctrl.hのインクルードが必要になります。コントロールの親ウインドウにWM_COMMAND(またはWM_NOTIFY)が通知されます。ボタンの場合は、ボタンを押した際にWM_COMMANDが送られます。次に、WM_COMMANDを処理する例を示します。TEXT("ボタンが押されました。0;WM_COMMANDのwParamの下位ワードには、コントロールのIDが格納されます。これがボタンのIDと一致したならば、ボタンに関する通知であると分かります。wParamの上位ワードには、通知コードが格納されます。ボタンが押された場合はBN_CLICKEDが格納されます。WM_COMMANDのlParamには、コントロールのウインドウハンドルが格納されます。今回のプログラムは、ボタンが選択された場合にメッセージボックスを表示します。TEXT("ボタンが押されました。lParam);}ボタンの作成は、WM_CREATEで行っています。ここで作成しておけば、親ウインドウが表示される際にはボタンも表示されることになります。これはWM_CREATEのlParamに格納されているCREATESTRUCT構造体から参照できます。今回のプログラムで使用する機会がないからです。今回の場合はこれでも問題ありません。WM_COMMANDが送られた時点でボタンが押下されたものと判断することができます。