ステータス バー (Windows コントロール)
ステータス バー は、アプリケーションがさまざまな種類のステータス情報を表示できる親ウィンドウの下部にある水平ウィンドウです。 ステータス バーをパーツに分割して、複数の種類の情報を表示できます。 次のスクリーン ショットは、Microsoft Windows Paint アプリケーションのステータス バーを示しています。 この場合、ステータス バーに "ヘルプの場合は、[ヘルプ] メニューの [ヘルプ トピック] をクリックしてください" というテキストが表示されます。 ステータス バーは、ヘルプ テキストと座標情報を含むウィンドウの下部にある領域です。
ペイント アプリケーションのスクリーン ショット
このセクションには、次のトピックが含まれています。
- 型とスタイルの
- サイズと高さの
- Multiple-Part ステータス バーの
- ステータス バーのテキスト操作 を する
- Owner-Drawn ステータス バーの
- シンプル モードステータスバー
- 既定のステータス バーメッセージ処理 の
型とスタイル
ステータス バーの既定の位置は親ウィンドウの下部にありますが、CCS_TOP スタイルを指定して、親ウィンドウのクライアント領域の上部に表示することができます。
SBARS_SIZEGRIP スタイルを指定して、ステータス バーの右端にサイズ変更グリップを含めることができます。
手記
CCS_TOP スタイルと SBARS_SIZEGRIP スタイルを組み合わせることはお勧めしません。結果のサイズ変更グリップは機能しないためです。
サイズと高さ
ステータス バーのウィンドウ プロシージャは、CreateWindowEx 関数で指定された値を無視して、ウィンドウの初期サイズと位置を自動的に設定します。 幅は、親ウィンドウのクライアント領域と同じです。 高さは、ステータス バーのデバイス コンテキストで現在選択されているフォントのメトリックと、ウィンドウの境界線の幅に基づきます。
ウィンドウ プロシージャは、WM_SIZE メッセージを受信するたびにステータス バーのサイズを自動的に調整します。 通常、親ウィンドウのサイズが変更されると、親は WM_SIZE メッセージをステータス バーに送信します。
アプリケーションは、ウィンドウに SB_SETMINHEIGHT メッセージを送信し、最小の高さをピクセル単位で指定することで、ステータス バーの描画領域の最小高さを設定できます。 図面領域には、ウィンドウの境界線は含まれません。 最小高さは、所有者が描画したステータス バーで描画する場合に便利です。 詳細については、この章の後半の「ステータス バー Owner-Drawn を参照してください。
ウィンドウに SB_GETBORDERS メッセージを送信して、ステータス バーの境界線の幅を取得します。 メッセージには、幅を受け取る 3 要素配列のアドレスが含まれます。
ステータス バーの Multiple-Part
ステータス バーにはさまざまな部分があり、それぞれ異なるテキスト行が表示されます。 ウィンドウに SB_SETPARTS メッセージを送信し、作成する部分の数と整数配列のアドレスを指定して、ステータス バーをパーツに分割します。 配列にはパーツごとに 1 つの要素が含まれており、各要素はパーツの右端のクライアント座標を指定します。
ステータス バーには最大 256 個のパーツを含めることができますが、通常、アプリケーションの使用回数はそれより大幅に少なくなります。 ウィンドウに SB_GETPARTS メッセージを送信することで、ステータス バーのパーツの数と各パーツの右端の座標を取得します。
ステータス バーのテキスト操作
ステータス バーの任意の部分のテキストを設定するには、SB_SETTEXT メッセージを送信し、パーツの 0 から始まるインデックス、パーツに描画する文字列のアドレス、および文字列を描画する手法を指定します。 描画手法では、テキストに罫線があるかどうかを決定し、罫線がある場合は罫線のスタイルを指定します。 また、親ウィンドウがテキストを描画するかどうかを決定します。 詳細については、以下の「ステータス バーの Owner-Drawn」セクションを参照してください。
既定では、テキストはステータス バーの指定した部分内で左揃えになります。 テキストにタブ文字 (\ t) を埋め込んで、中央揃えまたは右揃えにできます。 1 つのタブ文字の右側のテキストが中央に配置され、2 番目のタブ文字の右側のテキストが右揃えになります。
ステータス バーからテキストを取得するには、メッセージの SB_GETTEXTLENGTH と SB_GETTEXT を使用します。
アプリケーションで 1 つの部分のみを含むステータス バーを使用する場合は、WM_SETTEXT、WM_GETTEXT、および WM_GETTEXTLENGTH メッセージを使用してテキスト操作を実行できます。 これらのメッセージは、インデックスが 0 の部分のみを処理するため、ステータス バーを静的テキスト コントロールと同じように扱うことができます。
ステータス バーを作成せずにステータス行を表示するには、DrawStatusText 関数を使用します。 この関数では、ステータス バーのウィンドウ プロシージャと同じ手法を使用してステータスを描画しますが、ステータス情報のサイズと位置は自動的に設定されません。 関数を呼び出すときは、状態情報のサイズと位置、および描画するウィンドウのデバイス コンテキストを指定する必要があります。
ステータス バーの Owner-Drawn
ステータス バーの個々の部分を所有者描画パーツとして定義できます。 この手法を使用すると、ウィンドウ パーツの外観を制御するよりも詳細に制御できます。 たとえば、テキストではなくビットマップを表示したり、別のフォントを使用してテキストを描画したりできます。
ウィンドウ パーツを所有者描画として定義するには、SB_SETTEXT メッセージをステータス バーに送信し、パーツとSBT_OWNERDRAW描画手法を指定します。 SBT_OWNERDRAWを指定すると、lParam パラメーターは、アプリケーションがパーツを描画するときに使用できる 32 ビットのアプリケーション定義値です。 たとえば、フォント ハンドル、ビットマップ ハンドル、文字列のアドレスなどを指定できます。
ステータス バーは、所有者描画パーツを描画する必要がある場合、WM_DRAWITEM メッセージを親ウィンドウに送信します。 メッセージの wParam パラメーターはステータス バーの子ウィンドウ識別子であり、lParam パラメーターは、DRAWITEMSTRUCT 構造体のアドレスです。 親ウィンドウでは、構造内の情報を使用してパーツを描画します。 ステータス バーの所有者描画部分の場合、DRAWITEMSTRUCT には次の情報が含まれます。
メンバー | 形容 |
---|---|
CtlType | 未定義;使用しないでください。 |
CtlID を する | ステータス バーの子ウィンドウ識別子。 |
itemID を する | 描画するパーツの 0 から始まるインデックス。 |
itemAction を する | 未定義;使用しないでください。 |
itemState を する | 未定義;使用しないでください。 |
hwndItem を する | ステータス バーへのハンドル。 |
hDC の | ステータス バーのデバイス コンテキストを処理します。 |
rcItem を する | 描画するウィンドウ パーツの座標。 座標はステータス バーの左上隅を基準にしています。 |
itemData を する | SB_SETTEXT メッセージの lParam パラメーターで指定されたアプリケーション定義の 32 ビット値。 |
簡易モードのステータス バー
ステータス バーを "簡易モード" に設定するには、SB_SIMPLE メッセージを送信します。 簡易モードのステータス バーには、1 つの部分のみが表示されます。 ウィンドウのテキストを設定すると、ウィンドウは無効になりますが、次の WM_PAINTまで再描画されません。 メッセージを待機すると、ウィンドウが再描画される回数が最小限に抑えられ、画面のちらつきが軽減されます。 シンプル モードのステータス バーは、ユーザーがメニューをスクロールしている間にメニュー項目のヘルプ テキストを表示する場合に便利です。
単純モードの状態でステータス バーに表示される文字列は、非単純モード時に表示される文字列とは別に保持されます。 つまり、シンプル モードでウィンドウを配置し、そのテキストを設定し、非単純モードのテキストを変更せずに非単純モードに切り替えることができます。
単純モードのステータス バーのテキストを設定する場合は、SBT_OWNERDRAW以外の描画手法を指定できます。 シンプル モードのステータス バーでは、所有者の描画はサポートされていません。
既定のステータス バーのメッセージ処理
このセクションでは、定義済みの STATUSCLASSNAME クラスのウィンドウ プロシージャによって処理されるメッセージについて説明します。
メッセージ | 既定の処理 |
---|---|
WM_CREATE | ステータス バーを初期化します。 |
WM_DESTROY | ステータス バーに割り当てられたリソースを解放します。 |
WM_GETFONT | ステータス バーがテキストを描画する現在のフォントのハンドルを返します。 |
WM_GETTEXT | ステータス バーの最初の部分からバッファーにテキストをコピーします。 テキストの長さとテキストの描画に使用する手法を指定する 32 ビット値を返します。 |
WM_GETTEXTLENGTH | ステータス バーの最初の部分のテキストの長さと、テキストの描画に使用する手法を指定する 32 ビット値を返します。 |
WM_NCHITTEST | マウス カーソルがサイズ変更グリップにある場合に HTBOTTOMRIGHT 値を返し、システムにサイズ変更カーソルが表示されます。 マウス カーソルがサイズ変更グリップにない場合、ステータス バーはこのメッセージを DefWindowProc 関数に渡します。 |
WM_PAINT | ステータス バーの無効な領域を塗りつぶします。 wParam パラメーターが NULL以外の場合、コントロールは値が HDC であると見なし、そのデバイス コンテキストを使用して描画します。 |
WM_SETFONT | ステータス バーのデバイス コンテキストにフォント ハンドルを選択します。 |
WM_SETTEXT | 既定の描画操作 (ゼロとして指定) を使用して、指定したテキストをステータス バーの最初の部分にコピーします。 成功した場合 TRUE を返し、それ以外の場合は FALSE 返します。 |
WM_SIZE | 親ウィンドウのクライアント領域の現在の幅とステータス バーの現在のフォントの高さに基づいてステータス バーのサイズを変更します。 |