ボタン メッセージ
ボタンは親ウィンドウにメッセージを送信でき、親ウィンドウはボタンにメッセージを送信できます。
このセクションでは、次のトピックについて説明します。
- ボタン へのメッセージの送信を する
- ボタン からのメッセージの処理を する
- ボタン からの通知メッセージの
- ボタンのカラー メッセージ
- ボタンの既定のメッセージ処理
- 関連トピック
ボタンへのメッセージの送信
親ウィンドウは、SendMessage 関数を使用して、重なり合ったウィンドウまたは子ウィンドウのボタンにメッセージを送信したり、SendDlgItemMessage、CheckDlgButton、CheckRadioButton、IsDlgButtonChecked 関数を使用してダイアログ ボックス内のボタンにメッセージを送信したりできます。
アプリケーションは、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_DISABLE、BN_PUSHED、BN_KILLFOCUS、BN_PAINT、BN_SETFOCUS、および BN_UNPUSHED 通知コードが BS_NOTIFY スタイルの場合にのみ送信されます。 BN_DBLCLK 通知コードは、BS_USERBUTTON、BS_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_LBUTTONDOWN と WM_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 | 次の表に示すように、既定のボタン プロシージャによって処理される入力の種類を示す値を返します。
|
||||||||||||||||
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 関数に渡します。
関連トピック
-
メッセージ を制御する