Button の状態

このセクションでは、ボタンの選択によって状態がどのように変わるかと、アプリケーションでどのように応答するべきかについて説明します。

このセクションは、以下のトピックで構成されています。

ボタンの選択

ユーザーは、3 つの方法でボタンを選択できます。マウスでクリックする方法、Tab キーで移動して Enter キーを押す方法、または (ボタンが WS_GROUP スタイルで定義されたグループの一部である場合) グループ内の選択されたボタンに Tab キーで移動し、方向キーでグループ内を移動する方法です。 Tab キーを使う 2 つの方法は、システムによって提供される定義済みのキーボード インターフェイスの一部です。 このインターフェイスの詳細な説明については、「ダイアログ ボックス」を参照してください。

ボタンを選択すると、通常は以下のイベントが発生します。

  • システムによって、ボタンにキーボード フォーカスが与えられます。
  • ボタンは、選択について通知するメッセージを親ウィンドウに送信します。
  • 親ウィンドウ (またはシステム) が、ボタンの状態を変更するためのメッセージをボタンに送信します。
  • 親ウィンドウ (またはシステム) が、新しい状態を反映するようにボタンを再描画します。

ボタンの状態の要素

ボタンの状態は、フォーカス状態、プッシュ状態、およびチェック状態によって特徴付けることができます。

フォーカス状態

フォーカス状態は、チェック ボックス、ラジオ ボタン、プッシュ ボタン、または所有者描画ボタンに適用されます。 ユーザーがボタンを選択すると、そのボタンはキーボード フォーカスを取得し、ユーザーが別のコントロールを選択するとフォーカスを失います。 キーボード フォーカスを取得できるコントロールは一度に 1 つだけです。

ボタンにキーボード フォーカスがある場合、システムは通常、ボタンを点線で囲むことで、ボタンのテキスト、アイコン、またはビットマップを強調表示します。 さらに、プッシュ ボタンにフォーカスがある場合は、ボタンに濃い境界線が付きます。 自動ボタンの強調表示はシステムによって自動的に変更されますが、自動ではないボタンの強調表示は、アプリケーションがメッセージを送信することで変更する必要があります。

プッシュ状態

プッシュ状態は、プッシュ ボタン、チェック ボックス、ラジオ ボタン、または 3 の状態のチェック ボックスには適用されますが、その他のボタンには適用されません。 ボタンのプッシュ状態には、プッシュされた状態とプッシュされていない状態があります。 プッシュ ボタン (または BS_PUSHLIKE スタイルが設定された任意のボタン) が押下されると、そのボタンは沈み込んだボタンとして描画されます。 プッシュされていないときは、浮き出たボタンとして描画されます。 チェック ボックス、ラジオ ボタン、または 3 状態チェック ボックスがクリックされると、ボタンの背景が灰色で表示されます。 ボタンが押されていないときは、ボタンの背景は灰色ではありません。

チェック状態

チェック状態は、チェック ボックス、ラジオ ボタン、または 3 状態チェック ボックスに適用されますが、その他のボタンには適用されません。 この状態は、チェック、クリア、または (3 状態チェック ボックスの場合) 不確定のいずれかになります。 チェック ボックスにチェックマークが含まれている場合はチェックであり、含まれていない場合はクリアです。 ラジオ ボタンは、黒い点が含まれている場合はチェックであり、含まれていない場合はクリアです。 3 状態チェック ボックスは、チェック マークが含まれている場合はチェックであり、含まれていない場合はクリアであり、灰色のボックスが含まれている場合は不確定です。 自動ボタンのチェック状態はシステムによって自動的に変更されますが、自動ではないボタンのチェック状態はアプリケーションが変更する必要があります。

ボタンの状態に対する変更

ユーザーがボタンを選択したときは、通常はボタンの状態要素を 1 つ以上変更する必要があります。 すべての種類のボタンのフォーカス状態、プッシュ ボタンまたは BS_PUSHLIKE スタイルが設定されたボタンのプッシュ状態、すべての自動ボタンのチェック状態は、システムによって自動的に変更されます。 その他のすべての状態の変更については、ボタンの種類、スタイル、現在の状態を考慮して、アプリケーションで実行する必要があります。 次の一覧に、変更する必要がある状態要素をボタンの種類ごとに示しています。

  • チェック ボックスは、チェック状態を変更する必要があります。
  • ラジオ ボタンは、チェック状態を変更する必要があります。 また、ラジオ ボタンの相互排他的な性質を確実に反映するために、同じグループ内の他のラジオ ボタンのチェック状態を変更する必要が生じる場合もあります。
  • 所有者描画ボタンの状態はアプリケーションに依存するため、ボタン内でアプリケーションを変更する必要がある要素は異なる場合があります。 ユーザーはグループ ボックスを選択できないため、グループ ボックスの要素を変更する必要はありません。

アプリケーションは、ボタンに BM_GETCHECK メッセージまたは BM_GETSTATE メッセージを送信することで、ボタンの状態を判別できます。また、ボタンに BM_SETCHECK メッセージまたは BM_SETSTATE メッセージを送信することで、ボタンの状態を設定できます。