次の方法で共有


ボタン メッセージ

ボタンは親ウィンドウにメッセージを送信でき、親ウィンドウはボタンにメッセージを送信できます。

このセクションでは、次のトピックについて説明します。

ボタンへのメッセージの送信

親ウィンドウは、SendMessage 関数を使用して、重なり合ったウィンドウまたは子ウィンドウのボタンにメッセージを送信したり、SendDlgItemMessageCheckDlgButtonCheckRadioButtonIsDlgButtonChecked 関数を使用してダイアログ ボックス内のボタンにメッセージを送信したりできます。

アプリケーションは、BM_GETCHECK メッセージを使用して、チェック ボックスまたはラジオ ボタンのチェック状態を取得できます。 アプリケーションでは、BM_GETSTATE メッセージを使用して、ボタンの現在の状態 (チェック状態、プッシュ状態、フォーカス状態) を取得することもできます。 特定の状態に関する情報を取得するには、返された状態値に対してビットマスクを使用します。

BM_SETCHECK メッセージは、チェック ボックスまたはラジオ ボタンのチェック状態を設定します。メッセージは 0 を返します。 BM_SETSTATE メッセージは、ボタンのプッシュ状態を設定します。このメッセージは 0 も返します。 BM_SETSTYLE メッセージは、ボタンのスタイルを変更します。 これは、型内のボタン スタイルを変更するように設計されています (たとえば、チェック ボックスを自動チェック ボックスに変更するなど)。 種類を変更するためのものではありません (チェック ボックスをラジオ ボタンに変更するなど)。 アプリケーションでは、ある種類から別の型にボタンを変更しないでください。

BS_BITMAP または BS_ICON スタイルのボタンには、テキストではなくビットマップまたはアイコンが表示されます。 BM_SETIMAGE メッセージは、ハンドルをボタン付きのビットマップまたはアイコンに関連付けます。 BM_GETIMAGE メッセージは、ボタンに関連付けられているビットマップまたはアイコンへのハンドルを取得します。

アプリケーションでは、DM_GETDEFID メッセージを使用して、ダイアログ ボックスの既定のプッシュ ボタン コントロールの識別子を取得することもできます。 アプリケーションは、DM_SETDEFID メッセージを使用して、ダイアログ ボックスの既定のプッシュ ボタンを設定できます。

CheckDlgButton または CheckRadioButton関数呼び出すことは、BM_SETCHECK メッセージの送信と同じです。 IsDlgButtonChecked 関数の呼び出しは、BM_GETCHECK メッセージの送信と同じです。

ボタンからのメッセージの処理

ボタンからの通知は、WM_COMMAND または WM_NOTIFY メッセージとして送信されます。 使用されるメッセージに関する情報は、各通知のリファレンス ページで確認できます。

メッセージの処理方法の詳細については、「メッセージ 制御する」を参照してください。 「ボタン メッセージ」も参照してください。

ボタンからの通知メッセージ

ユーザーがボタンをクリックすると、その状態が変わり、ボタンは WM_COMMAND メッセージの形式で通知コードを親ウィンドウに送信します。 たとえば、プッシュ ボタン コントロールは、ユーザーがボタンを選択するたびに BN_CLICKED 通知コードを送信します。 いずれの場合も (BCN_HOTITEMCHANGEを除く)、wParam パラメーターの下位ワードには制御識別子が含まれ、wParam の上位ワードには通知コードが含まれ、lParam パラメーターにはコントロール ウィンドウ ハンドルが含まれます。

メッセージと親ウィンドウの応答はどちらも、ボタンの種類、スタイル、および現在の状態によって異なります。 アプリケーションで監視および処理する必要があるボタン通知コードを次に示します。

通知コード 形容
BCN_HOTITEMCHANGE マウスがボタンのクライアント領域に入ったか、左に移動しました。
BN_CLICKED ユーザーがボタンをクリックしました。
BN_DBLCLK または BN_DOUBLECLICKED ユーザーがボタンをダブルクリックしました。
BN_DISABLE ボタンが無効になっています。
BN_PUSHED または BN_HILITE ユーザーがボタンを押しました。
BN_KILLFOCUS ボタンがキーボードフォーカスを失いました。
BN_PAINT ボタンは塗りつぶす必要があります。
BN_SETFOCUS ボタンがキーボードフォーカスを取得しました。
BN_UNPUSHED または BN_UNHILITE ボタンはプッシュされなくなりました。

 

ボタンは、BN_DISABLEBN_PUSHEDBN_KILLFOCUSBN_PAINTBN_SETFOCUS、および BN_UNPUSHED 通知コードが BS_NOTIFY スタイルの場合にのみ送信されます。 BN_DBLCLK 通知コードは、BS_USERBUTTONBS_RADIOBUTTON、および BS_OWNERDRAW ボタンに対して自動的に送信されます。 その他のボタンの種類では、BS_NOTIFY スタイルがある場合にのみ、BN_DBLCLKが送信されます。 すべてのボタンは、ボタンのスタイルに関係なく、BN_CLICKED 通知コードを送信します。

自動ボタンの場合、システムはプッシュ状態を変更し、ボタンを塗りつぶします。 この場合、アプリケーションは通常、BN_CLICKED 通知コードと BN_DBLCLK 通知コードのみを処理します。 自動ではないボタンの場合、アプリケーションは通常、ボタンの状態を変更するメッセージを送信して通知コードに応答します。 ボタンにメッセージを送信する方法については、「ボタンへのメッセージの送信」を参照してください。

ユーザーが所有者が描画したボタンを選択すると、ボタンは親ウィンドウに、描画するコントロールの識別子とそのディメンションと状態に関する情報を含む WM_DRAWITEM メッセージを送信します。

ボタンカラーメッセージ

システムは、ボタンの既定の色値を提供します。 アプリケーションでは、GetSysColor 関数を呼び出してこれらの色の既定値を取得したり、SetSysColors 関数を呼び出して値を設定したりできます。 次の表に、既定のボタンカラー値を示します。

価値 色付きの要素
COLOR_BTNFACE ボタンの面。
COLOR_BTNHIGHLIGHT ボタンの強調表示領域 (上端と左端)。
COLOR_BTNSHADOW ボタンのシャドウ領域 (下端と右端)。
COLOR_BTNTEXT ボタン内の標準 (未設定) テキスト。
COLOR_GRAYTEXT ボタン内のテキストを無効 (灰色) にします。 現在のディスプレイ ドライバーが単色の灰色をサポートしていない場合、この色は 0 に設定されます。
COLOR_WINDOW ウィンドウの背景。
COLOR_WINDOWFRAME 窓枠。
COLOR_WINDOWTEXT ウィンドウ内のテキスト。

 

ただし、SetSysColors呼び出すことはすべてのアプリケーションに影響するため、この関数を呼び出してアプリケーションのボタンをカスタマイズしないでください。

システムは、ボタンを描画する前に、ボタンの親ウィンドウに WM_CTLCOLORBTN メッセージを送信します。 このメッセージには、ボタンのデバイス コンテキストへのハンドルと子ウィンドウへのハンドルが含まれています。 親ウィンドウでは、これらのハンドルを使用して、ボタンのテキストと背景色を変更できます。 ただし、メッセージを処理する親ウィンドウには、所有者が描画したボタンのみが応答します。

ボタンの既定のメッセージ処理

定義済みのボタン コントロール ウィンドウ クラスのウィンドウ プロシージャは、ボタン コントロール プロシージャが処理しないすべてのメッセージに対して既定の処理を実行します。 ボタン コントロール プロシージャがメッセージ FALSE を返すと、定義済みのウィンドウ プロシージャはメッセージをチェックし、次の表に示す既定のアクションを実行します。

メッセージ 既定のアクション
BM_CLICK ボタンに WM_LBUTTONDOWNWM_LBUTTONUP メッセージを送信し、親ウィンドウに BN_CLICKED 通知コードを送信します。
BM_GETCHECK ボタンのチェック状態を返します。
BM_GETIMAGE ボタンに関連付けられているビットマップまたはアイコンへのハンドルを返すか、ボタンにビットマップまたはアイコンがない場合は null します。
BM_GETSTATE ボタンの現在のチェック状態、プッシュ状態、フォーカス状態を返します。
BM_SETCHECK ラジオ ボタンとチェック ボックスのすべてのスタイルのチェック状態を設定します。 オプション ボタンの wParam パラメーターが 0 より大きい場合、ボタンには WS_TABSTOP スタイルが指定されます。
BM_SETIMAGE 指定したビットマップまたはアイコン ハンドルをボタンに関連付け、前のビットマップまたはアイコンにハンドルを返します。
BM_SETSTATE ボタンのプッシュ状態を設定します。 所有者が描画したボタンの場合、ボタンの状態が変更された場合、WM_DRAWITEM メッセージが親ウィンドウに送信されます。
BM_SETSTYLE ボタンのスタイルを設定します。 lParam パラメーターの下位ワードが TRUE 場合、ボタンが再描画されます。
WM_CHAR ユーザーがプラス (+) キーまたは等号 (=) キーを押したときに、チェック ボックスまたは自動チェック ボックスをオンにします。 ユーザーがマイナス (–) キーを押したときに、チェック ボックスまたは自動チェック ボックスをオフにします。
WM_ENABLE ボタンを塗りつぶします。
WM_ERASEBKGND 所有者が描画したボタンの背景を消去します。 他のボタンの背景は、WM_PAINT および WM_ENABLE 処理の一部として消去されます。
WM_GETDLGCODE 次の表に示すように、既定のボタン プロシージャによって処理される入力の種類を示す値を返します。
ボタンのスタイル 収益
BS_AUTOCHECKBOX DLGC_WANTCHARS |DLGC_BUTTON
BS_AUTORADIOBUTTON DLGC_RADIOBUTTON |DLGC_BUTTON
BS_CHECKBOX DLGC_WANTCHARS |DLGC_BUTTON
BS_DEFPUSHBUTTON DLGC_DEFPUSHBUTTON |DLGC_BUTTON
BS_GROUPBOX DLGC_STATIC
BS_PUSHBUTTON DLGC_UNDEFPUSHBUTTON |DLGC_BUTTON
BS_RADIOBUTTON DLGC_RADIOBUTTON |DLGC_BUTTON

 

WM_GETFONT 現在のフォントへのハンドルを返します。
WM_KEYDOWN ユーザーが SPACE キーを押すと、ボタンを押します。
WM_KEYUP Tab キーを除くすべてのケースでマウス キャプチャを解放します。
WM_KILLFOCUS ボタンからフォーカスの四角形を削除します。 プッシュ ボタンと既定のプッシュ ボタンの場合、フォーカスの四角形は無効になります。 ボタンにマウス キャプチャがある場合、キャプチャは解放され、ボタンはクリックされず、プッシュ状態はすべて削除されます。
WM_LBUTTONDBLCLK BN_DBLCLK 通知コードを、ラジオ ボタンと所有者が描画したボタンの親ウィンドウに送信します。 その他のボタンの場合、ダブルクリックは WM_LBUTTONDOWN メッセージとして処理されます。
WM_LBUTTONDOWN マウス カーソルの位置がボタンのクライアント四角形内にある場合は、ボタンを強調表示します。
WM_LBUTTONUP ボタンにマウス キャプチャがある場合は、マウス キャプチャを解放します。
WM_MOUSEMOVE ボタンにマウス キャプチャがある場合は、WM_LBUTTONDOWNと同じアクションを実行します。 それ以外の場合、アクションは実行されません。
WM_NCCREATE 任意の BS_OWNERDRAW ボタンを BS_PUSHBUTTON ボタンに変換します。
WM_NCHITTEST ボタン コントロールがグループ ボックスの場合は HTTRANSPARENT を返します。
WM_PAINT スタイルと現在の状態に従ってボタンを描画します。
WM_SETFOCUS フォーカスを取得するボタンにフォーカスの四角形を描画します。 ラジオ ボタンと自動ラジオ ボタンの場合、親ウィンドウには BN_CLICKED 通知コードが送信されます。
WM_SETFONT 新しいフォントを設定し、必要に応じてウィンドウを更新します。
WM_SETTEXT ボタンのテキストを設定します。 グループ ボックスの場合、メッセージは既存のテキストを塗りつぶしてから、新しいテキストでグループ ボックスを再描画します。
WM_SYSKEYUP Tab キーを除くすべてのケースでマウス キャプチャを解放します。

 

定義済みのウィンドウ プロシージャは、既定の処理のために、他のすべてのメッセージを DefWindowProc 関数に渡します。

メッセージ を制御する