ステータス バー ペインのテキストの更新
更新 : 2007 年 11 月
ここでは、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 が変更されると、次のアイドリング ループで表示が変更されます。