ここでは、MFC ステータス バーのペインに表示されるテキストの変更方法について説明します。 ステータス バーは、CStatusBar クラスのウィンドウ オブジェクトであり、複数の "ペイン" で構成されます。各ペインは、ステータス バーの四角形領域であり、ここに情報の表示できます。 たとえば、多くのアプリケーションでは、右端のペインに CapsLock や NumLock などのキーのステータスが表示されます。 同様に、左端のペイン (ペイン 0) にはメッセージが表示されます。ペインは、"メッセージ ペイン" とも呼ばれます。たとえば、既定の MFC ステータス バーのメッセージ ペインでは、現在選択されているメニュー項目またはツール バー ボタンの機能を説明する文字列が表示されます。 「ステータス バー」では、アプリケーション ウィザードで作成した MFC アプリケーションのステータス バーを図示しています。
既定では、CStatusBar ペインは作成時に自動的に有効にすることはできません。 ペインをアクティブにするには、ステータス バーのペインごとに ON_UPDATE_COMMAND_UI マクロを使用して、ペインを更新する必要があります。 ツール バー ボタンとは異なり、ペインでは WM_COMMAND メッセージが送信されないため、手作業でコードを入力する必要があります。
たとえば、あるペインのコマンド ID が ID_INDICATOR_PAGE であり、ペインにドキュメントの現在のページ番号が表示されるとします。 ステータス バーに新しいペインを作成する手順を次に示します。
新しいペインを作成するには
ペインのコマンド ID を定義します。
[表示] メニューの [リソース ビュー] をクリックします。 プロジェクト リソースを右クリックし、[リソース シンボル] をクリックします。 [リソース シンボル] ダイアログ ボックスの [新規作成] をクリックします。 コマンド ID 名を入力します。たとえば、ID_INDICATOR_PAGE です。 ID の値を指定するか、または [リソース シンボル] ダイアログ ボックスで表示された値をそのまま使用します。 たとえば、ID_INDICATOR_PAGE については、既定値をそのまま使用します。 [リソース シンボル] ダイアログ ボックスを閉じます。
ペインに表示する既定の文字列を定義します。
[リソース ビュー] を開きます。アプリケーションのリソースの種類が表示されているウィンドウの [String Table] をダブルクリックします。 String Table エディターが開いている状態で、[編集] メニューの [新しい文字列] をクリックします。 文字列エディター ウィンドウで、ペインのコマンド ID (ID_INDICATOR_PAGE など) を選択し、"Page " などの既定の文字列値を入力します。 ストリング エディターを閉じます。 既定の文字列を指定しないと、コンパイラ エラーが発生します。
indicators 配列にペインを追加します。
MAINFRM.CPP ファイルで indicators 配列を見つけます。 この配列は、ステータス バーのすべてのインジケーターのコマンド ID を左から右の順序で示すリストです。 ペインのコマンド ID を配列の適切な位置に入力します。ID_INDICATOR_PAGE の場合の入力例は、次のとおりです。
static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, ID_INDICATOR_PAGE, };
ペインにテキストを表示する場合は、ペインの更新ハンドラー関数で CCmdUI クラスの SetText メンバー関数を呼び出すことをお勧めします。 たとえば、現在のページ番号を示す整数型の変数 m_nPage を設定し、SetText を使用して、ペインのテキストに文字列バージョンのページ番号を設定できます。
注意
ペインにテキストを表示する場合は、SetText メンバー関数の使用をお勧めします。 CStatusBar のメンバー関数 SetPaneText を呼び出して、このタスクを実行することもできます。 ただし、その場合でも更新ハンドラーは必要です。 ペインの更新ハンドラーがない場合は、ペインが自動的に無効になり、その内容が消去されます。
更新ハンドラー関数を使用してペインにテキストを表示する手順を次に示します。
ペインでテキストを表示するには
コマンドのコマンド更新ハンドラーを追加します。
ハンドラーのプロトタイプを手作業で追加します。ID_INDICATOR_PAGE の場合の例は、次のとおりです (MAINFRM.H 内)。
afx_msg void OnUpdatePage(CCmdUI *pCmdUI);
適切な .CPP ファイルで、ハンドラーの定義を追加します。ID_INDICATOR_PAGE の場合の例は、次のとおりです (MAINFRM.CPP 内)。
void CMainFrame::OnUpdatePage(CCmdUI *pCmdUI) { pCmdUI->Enable(); CString strPage; strPage.Format(_T("Page %d"), m_nPage); pCmdUI->SetText(strPage); }
このハンドラーの最後の 3 行は、テキストを表示するコードです。
適切なメッセージ マップで、ON_UPDATE_COMMAND_UI マクロを追加します。ID_INDICATOR_PAGE の場合の例は、次のとおりです (MAINFRM.CPP 内)。
ON_UPDATE_COMMAND_UI(ID_INDICATOR_PAGE, &CMainFrame::OnUpdatePage)
CMainFrame クラスの m_nPage メンバー変数の値を定義すると、アプリケーションによってほかのインジケーターが更新されるのと同じ方法でアイドリング処理時にページ番号がペインに表示されます。 m_nPage が変更されると、次のアイドリング ループで表示が変更されます。