そのコントロールが有効になっている必要があります。ユーザーがボタンを押下してもアプリケーションにWM_COMMANDが通知されることはありません。コントロールは有効の状態で作成されることになります。アプリケーションによってはこれを望むような場面も多いといえます。特定の処理を実行している間に他の処理の実行を開始するボタンを無効にしたいことがあります。このように、動的にコントロールの状態を変更したい場合は、EnableWindowを呼び出します。bEnable);hWndは、ウインドウハンドルを指定します。bEnableは、ウインドウを有効にする場合に0以外の値を指定し、無効にする場合に0を指定します。そのきっかけを与える例として、チェックボックスの使用方法について取り上げます。チェックボックスを作成する場合は、ウインドウスタイルにBS_AUTOCHECKBOXを指定します。...);チェックボックスはボタンの一種であるため、第2引数のウインドウクラス名はBUTTONで構いません。アプリケーションからチェックボックスにチェックを付けたい場合は、CheckDlgButtonを呼び出します。uCheck);hDlgは、親ウインドウのハンドルを指定します。nIDButtonは、チェックしたいコントロールのIDを指定します。hWndは、ウインドウハンドルを指定します。uCheckは、チェックに関する定数を指定します。BST_CHECKEDを指定した場合はチェックされ、BST_UNCHECKEDを指定した場合はチェックが外されます。IsDlgButtonCheckedを呼び出します。nIDButton);hDlgは、親ウインドウのハンドルを指定します。nIDButtonは、チェックを確認したいコントロールのIDを指定します。戻り値がBST_CHECKEDの場合は、チェックされていることを意味します。今回のプログラムは、チェックボックスにチェックが付ついていない場合にボタンを無効化します。TEXT("ボタンが押されました。表示されているボタンは無効になります。チェックを付けるとボタンは有効になります。これを行っているのは、WM_COMMANDの次の処理です。BST_CHECKED);ボタンの状態を変更するので、EnableWindowの第1引数にはボタンのウインドウハンドルを指定します。IsDlgButtonCheckedの戻り値がBST_CHECKEDであるかどうかを確認します。BST_CHECKEDである場合は条件式が1になりますから、ボタンは有効になります。戻り値がBST_CHECKEDでない場合は条件式が0になりますから、ボタンは無効になります。ラジオボタンを使用するよう変更したコードを次に示します。TEXT("ボタンが押されました。lParam);}ラジオボタンを作成するには、ウインドウスタイルにBS_AUTORADIOBUTTONを指定します。ラジオボタンの性質上、実際に選択できるラジオボタンは1つだけです。無効にするラジオボタンが選択された場合はEnableWindowにFALSEを指定しています。ブラシのハンドルを返すことができます。背景色を変更したい場合はこのメッセージを処理することになります。