場合によってはアプリケーション内からコントロールを操作したいことがあります。コントロールを操作することになります。チェックボックスにチェックを付ける方法は、次に示す3通りあります。BST_CHECKED);1番目の方法は、コントロールにメッセージを送ることでコントロールを操作しています。BMというのはButtonMessageの略であり、エディットコントロールなどではEMのようになります。2番目の方法は、マクロを使用してコントロールを操作しています。1番目の方法と比べて引数が少ないという利点があります。マクロは数が非常に多く、windowsx.hのインクルードが必要な場合があります。3番目の方法は、専用の関数を使用してコントロールを操作しています。基本的にはメッセージかマクロでコントロールを操作することになります。PostMessageでは何か問題があるのでしょうか。このようなアドレスを要求するメッセージをPostMessageで送信するわけにはいきません。この時点で先に示したアドレスが無効になってしまうからです。IDさえ判っていればGetDlgItemでいつでも取得することができます。nIDDlgItem);hDlgは、親ウインドウのハンドルを指定します。nIDDlgItemは、コントロールのIDを指定します。戻り値は、コントロールのウインドウハンドルになります。今回のプログラムは、チェックボックスにチェックが付いている場合にボタンを無効にします。動作内容としては前節と同様ですが、今回はメッセージを使用して実装されています。TEXT("ボタンが押されました。今回はBM_SETCHECKメッセージを送ることでチェックを付けています。チェックの確認はIsDlgButtonCheckedではなく、BM_GETCHECKメッセージで実装しています。メッセージクラッカについてwindowsx.hは、コントロールを操作するためのマクロに加えてメッセージクラッカも定義しています。送られたメッセージの処理はこの関数内で行うことになります。その代わりとしてウインドウプロシージャの処理を簡素にすることができます。次に、コード例を示します。TEXT("ボタンが押されました。hwnd){PostQuitMessage(0);}WindowProcで使用されているHANDLE_MSGがメッセージクラッカです。これはマクロであり、適切な引数を指定して第3引数の関数を呼び出すコードをラッピングしています。HANDLE_WM_CREATEで検索することになります。